面向对象设计问题

5
我得到了这个面试问题,想知道一下:
一个软件公司设计了一个管理员工的应用程序,除了其他功能外,还可以计算薪水。
目前适合客户要求的结构是:
abstract Class Employee;
Class Manager extends Employee;
Class Engineer extends Employee;

客户现在希望增加能够支持按小时工资和月薪计算的员工不同类型薪资计算的功能。工程师和经理都可以是其中之一。
客户还通知了软件公司,他们将来会添加其他若干种薪资类型。
问题是 - 你会如何设计这个功能?它是否符合任何设计模式解决方案?
谢谢!
2个回答

7

应用策略模式:

http://en.wikipedia.org/wiki/Strategy_pattern

将“Salary_Calculation”作为与员工相关的策略。 "Salary_Calculation"应该是一个接口或抽象基类,每个薪资计算模型都是其子类。


谢谢。那是我的直觉。我会等一个小时看看其他的意见。顺便说一下 - 这不更像是委托而不是策略模式吗?http://p2p.wrox.com/book-professional-php-design-patterns/78122-differences-between-delegate-strategy-pattern.html - Turd
1
在这里使用 "委托模式" 意味着员工不会自己计算薪水,而是将其委托给策略对象。这并不意味着有不同的薪资计算模型。 "策略模式" 意味着您将拥有不同的子类,每个子类对应一种类型的薪资计算。它并没有定义计算发生的位置(不同的子类可能只提供元数据来帮助 "Employee" 进行正确的计算)。这两种模式在这里都适用,但我认为面试官认为 "策略模式" 更好。 - Doc Brown

1
在Employee对象的构造过程中添加一个SalaryCalculator接口,并使用薪资类型实例化一个SalaryCalculator对象。SalaryCalculator对象将负责每种薪资类型的薪资计算。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接