我有一个分为两个(国内和国际)的员工。 我有另一类退款,用于退还员工。 我有一个名为银行账户的类,退款类用于退款。
现在我的直接设计看起来像这样:
员工界面,国内和国际有2个子类型。
退款类在构造函数中包含Bank。
退款等级的粗略伪代码
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
}
}
}
现在我的问题是:
如何用面向对象的设计替换Refund类,这是可扩展的,我不需要使用if-else?
即时选项是将退款功能转移到员工类,然后各个子类型可以自行退款。但是,将员工类与Refund逻辑复杂化是有意义的(鉴于它的复杂功能,它会保留自己的模块化类)?
答案 0 :(得分:1)
为了保持OO设计并使其可扩展,而不将功能转移到Employee类,也许您只需向员工类添加属性,例如员工类型(国内/国际)以及退款类型,您可以然后使用现在可扩展的Refund类来进行特定类型的退款?
答案 1 :(得分:1)
员工 - >帐户[]类型,货币 - >项[]
员工 - >账户[]包含货币 - >具有类型
的条目[]您可以将每个帐户用于类型(退款)和货币,或者更好地使用仅适用于每种货币的帐户和带有类型的条目(退款)
其余的应该由服务完成!
答案 2 :(得分:1)
在我简要阅读你的问题后,我认为双重发送是你所寻求的。 见e。 G。 https://sourcemaking.com/design_patterns/visitor/java/2