2011-09-25 14 views
5

Got ten wywiad pytanie, które Zastanawiam o:OOP Projekt Pytanie

Firma oprogramowanie zaprojektowane aplikacji, która zarządza pracowników, a wśród innych funkcji, oblicza wynagrodzenia.

Obecna struktura, która pasuje do wymagań klienta jest:

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

Klient będzie teraz chciałbym dodać możliwość obsługi różnych typów obliczeń wynagrodzenia dla pracowników, którzy pracują na stawki godzinowej, miesięcznego wynagrodzenia. Zarówno inżynier, jak i menedżer mogą być albo.

Klient powiadomił również firmę produkującą oprogramowanie, że w przyszłości doda kilka innych rodzajów wynagrodzeń.

Pytanie - Jak zaprojektowałbyś to? Czy w przypadku rozwiązania dowolnego wzoru wzoru?

Dzięki!

Odpowiedz

7

Zastosuj wzorzec strategii:

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

make "Salary_Calculation" strategię związaną do pracownika. "Salary_Calculation" powinno być interfejsem lub abstrakcyjną klasą bazową, a każdy model obliczania wynagrodzeń jest podklasą tego.

+0

Dziękuję. To było moje przeczucie. Będę czekać przez godzinę, aby zobaczyć inne opinie. BTW - Czy nie jest to raczej delegat niż strategia? http://p2p.wrox.com/book-professional-php-design-patterns/78122-differences-between-delegate-strategy-pattern.html – Turd

+1

Używając "Wzorca delegowania" oznacza to, że Pracownik nie oblicza wynagrodzenie samo w sobie, ale przekazuje to do obiektu strategii. Nie mówi nic o różnych modelach obliczania wynagrodzeń. "Wzorzec strategii" oznacza, że ​​będziesz mieć różne podklasy, po jednej dla każdego rodzaju obliczania wynagrodzenia. Nie określa, gdzie odbywa się obliczenie (różne podklasy mogą po prostu dostarczyć metadane, aby pomóc "pracownikowi" wykonać odpowiednie obliczenia). Oba wzory będą miały zastosowanie tutaj, a ja "strategią" jest to, o czym rozmawialiście. –

1

Dodaj interfejs SalaryCalculator i wykonaj instancję obiektu SalaryCalculator podczas budowy obiektu pracownika za pomocą typu wynagrodzenia. Obiekt SalaryCalculaotr zajmie się obliczeniami wynagrodzeń dla każdego rodzaju wynagrodzenia.