Design patterns 互连算法的模式

Design patterns 互连算法的模式,design-patterns,Design Patterns,假设我正在创建一个工资系统。工资的多少取决于很多事情。以下是一些对计算有影响的类族: 员工类型:常规、合同等 时间记录类型:正常、加班等 位置:配送站点、客户站点等 我认为这三个家族将各自代表一个继承层次。但是,每种家庭类型都会对工资计算产生影响 例如,在DeliverySite具有正常时间记录的普通员工的付款将不同于在ClientSite具有正常时间记录的普通员工的付款。同时,在交货地点向有加班记录的正式员工付款与在客户地点向正式员工付款不同。等等 我如何建模?我在考虑一些策略/责任链的组合,

假设我正在创建一个工资系统。工资的多少取决于很多事情。以下是一些对计算有影响的类族:

员工类型:常规、合同等

时间记录类型:正常、加班等

位置:配送站点、客户站点等

我认为这三个家族将各自代表一个继承层次。但是,每种家庭类型都会对工资计算产生影响

例如,在DeliverySite具有正常时间记录的普通员工的付款将不同于在ClientSite具有正常时间记录的普通员工的付款。同时,在交货地点向有加班记录的正式员工付款与在客户地点向正式员工付款不同。等等


我如何建模?我在考虑一些策略/责任链的组合,但我不太清楚实现会是什么样子。

装饰器模式能够在您添加到对象的每一层中添加新的功能/计算。您可以在以后动态添加这些,而无需重构当前代码

从一个基本类开始,您将添加新的“层”(装饰)这个对象


这里可以找到一个使用Decorator模式的好例子:

当您添加新员工类型、记录类型或位置类型时,计算算法会发生什么?或者当您添加新的“族”时?理想情况下,当添加现有族的新实现(子类)时,应该只有最小的更改。最困难的部分是当一个新的家庭全部被添加时——如果这些家庭相互引用(到目前为止我能想到的最好的解决方案),那么添加一个新的家庭可能会带来许多困难的变化。在任何情况下,这两种情况中的任何一种都会影响算法。这不是我要问的。我问当添加新的子类时,什么样的业务规则会发生变化。当然,设计应该尽量减少变化。但是,如果我们不知道整个计算过程的细节,我们不能向您提出任何建议。如果添加了新的子类或出现了新的族,那么薪资的计算将受到影响。也许会应用一些乘数,或者从不同的表中获取费率,等等。