2011-09-25 148 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對象將負責每種工資類型的工資計算。