2011-09-25 11 views
5

Questa domanda dell'intervista mi viene in mente:OOP Design Domanda

Una società di software ha progettato un'app che gestisce i dipendenti e, tra le altre funzioni, calcola Salario.

L'attuale struttura che si adatta esigenze del cliente è:

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

Il cliente vorrebbe ora di aggiungere la capacità di supportare diversi tipi di calcoli di stipendio per i dipendenti che lavorano su un salario orario, stipendio mensile. Sia l'Ingegnere che il Manager possono essere entrambi.

Il cliente ha inoltre notificato alla società di software che aggiungerà un certo numero di altri tipi di salari in futuro.

La domanda: come progetteresti questo? Se cade in una soluzione di progettazione?

Grazie!

risposta

7

Applicare il modello di strategia:

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

Make "Salary_Calculation" una strategia associata a dipendenti. "Salary_Calculation" dovrebbe essere un'interfaccia o una classe base astratta, e ogni modello di calcolo degli stipendi è una sottoclasse di questo.

+0

Grazie. Questa era la mia impressione. Aspetterò un'ora per vedere altre opinioni. BTW - Non è più un delegato che una strategia? http://p2p.wrox.com/book-professional-php-design-patterns/78122-differenze-travelociato-strategy-pattern.html – Turd

+1

Utilizzando il "modello di delega" qui significa che il Dipendente non calcola il lo stipendio da solo ma lo delega all'oggetto strategia. Non dice nulla sui diversi modelli di calcolo degli stipendi. "Schema strategico" significa che avrai sottoclassi diverse, una per ogni tipo di calcolo del salario. Non definisce dove avviene il calcolo (le diverse sottoclassi possono semplicemente fornire metadati per aiutare "Dipendente" a fare il calcolo corretto). Entrambi i modelli saranno applicabili qui, tu che cosa "strategia" è ciò che cercavi dopo l'intervistatore. –

1

Aggiungere un'interfaccia SalaryCalculator e creare un'istanza di un oggetto SalaryCalculator durante la costruzione dell'oggetto Dipendente utilizzando il tipo di stipendio. L'oggetto SalaryCalculaotr si occuperà dei calcoli salariali per ciascun tipo di stipendio.