Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 良好的面向对象实践+;为了面向对象,我们应该在子类中实现复杂的逻辑吗?_Java_Oop - Fatal编程技术网

Java 良好的面向对象实践+;为了面向对象,我们应该在子类中实现复杂的逻辑吗?

Java 良好的面向对象实践+;为了面向对象,我们应该在子类中实现复杂的逻辑吗?,java,oop,Java,Oop,我的员工分为两类(国内和国际)。 我有另一个类退款,用于退款员工。 我有一个叫做“银行账户”的课程,用于退款课程 现在,我的即时设计如下所示: 员工界面,具有国内和国际两个子类型 退款类在构造函数中接收银行 退款类的一个粗略伪码 Class Refund Refund( bank account ) Public class Refund( employee ) { If (employee is domestic) { Pay t

我的员工分为两类(国内和国际)。 我有另一个类退款,用于退款员工。 我有一个叫做“银行账户”的课程,用于退款课程

现在,我的即时设计如下所示:

员工界面,具有国内和国际两个子类型

退款类在构造函数中接收银行

退款类的一个粗略伪码

Class Refund

    Refund( bank account )

   Public class Refund( employee ) {

         If (employee is domestic) {
             Pay to bank
             Account for taxes
        } else {
           do currency conversion
           Pay to bank 
           Call some 3rd party to do taxation
       }
    }
}
现在我的问题是:

  • 我如何用面向对象的设计来替换退款类,它是可扩展的,我不需要使用if-else

  • 即时选项是将退款功能转移到Employee类中,然后各个子类型可以执行自己的退款逻辑。但是-用退款逻辑使employee类复杂化有意义吗(考虑到它的复杂函数,它应该拥有自己的模块化类)


  • 为了保持OO设计并使其可扩展,而不将功能转移到Employee类,也许您只需向Employee类添加属性,例如Employee类型(国内/国际)以及退款类型,然后,您可以使用现在可扩展的退款类进行特定类型的退款?

    员工->账户[],类型、货币->条目[]


    员工->账户[]与货币->分录[]与类型

    您可以将每个帐户用于类型(退款)和货币,或者最好仅为每个货币和具有类型(退款)的条目创建一个帐户


    剩下的应该由服务人员来完成

    在我简单地阅读了你的问题之后,我认为你寻求的是双重派遣。
    见e。g

    本教程的第一部分将介绍更好的模板模式,它允许您实现一个算法,并允许子类进行自定义工作。在这里,您可以为国内类设置一个
    退款,为国际
    设置一个
    退款,以及作为其父类的
    退款
    类。然后,员工有一个类型为
    退款
    的属性。