2011-09-25 116 views
5

得到它我想了解一下这个面试问题:OOP设计问题

一家软件公司设计的管理员工的应用程序,并在其他功能中,计算工资。

符合该客户要求目前的结构是:

abstract Class Employee; 
Class Manager extends Employee; 
Class Engineer extends Employee; 

客户现在想加入到支持不同类型的工资计算了谁上的小时工资,月工资工作的员工的能力。工程师和经理都可以。

该客户还通知软件公司,他们将在未来增加一些其他类型的工资。

问题 - 你会如何设计?如果出现任何设计模式解决方案?

谢谢!

回答

7

应用策略模式:

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

使 “Salary_Calculation” 关联员工的策略。 “Salary_Calculation”应该是一个接口或抽象基类,每个工资计算模型都是其子类。

+0

谢谢。那是我的直觉。我会等一个小时看看其他意见。顺便说一句 - 这不是比战略更重要的代表吗? http://p2p.wrox.com/book-professional-php-design-patterns/78122-differences-between-delegate-strategy-pattern.html – Turd

+1

这里使用“委托模式”表示员工不计算薪水本身,但委托给战略对象。它没有提到关于不同的薪水计算模型。 “战略模式”意味着您将拥有不同的子类,每种类型的薪资计算都有一个子类。它没有定义计算发生的地方(不同的子类可能只是提供元数据来帮助“员工”做正确的计算)。这两种模式都适用于这里,我的“策略”就是面试官之后的事情。 –

1

添加SalaryCalculator接口并使用薪水类型在Employee对象的构造期间实例化SalaryCalculator对象。 SalaryCalculaotr对象将负责每种工资类型的工资计算。