2011-09-25 15 views
5

consiguió esta pregunta de la entrevista, que me pregunto sobre: ​​POO Diseño Pregunta

Una compañía de software diseñado una aplicación que gestiona los empleados y, entre otras funciones, calcula el salario.

La estructura actual que se ajusta a las necesidades del cliente es:

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

El cliente ahora quiere añadir la capacidad de soportar diferentes tipos de cálculos salariales para los empleados que trabajan en un salario por hora, salario mensual. Tanto Engineer como Manager pueden ser cualquiera.

El cliente también notificó a la compañía de software que agregarán otros tipos de salarios en el futuro.

The Question - ¿Cómo diseñarías esto? ¿Cae si cae en alguna solución de patrón de diseño?

Gracias!

Respuesta

7

Aplicar el patrón de estrategia:

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

Marca "Salary_Calculation" una estrategia asociada con el empleado. "Salary_Calculation" debe ser una interfaz o una clase base abstracta, y cada modelo de cálculo de salario es una subclase de eso.

+0

Gracias. Esa fue mi corazonada. Esperaré una hora para ver otras opiniones. Por cierto, ¿no es esto más un delegado que una estrategia? http://p2p.wrox.com/book-professional-php-design-patterns/78122-differences-between-delegate-strategy-pattern.html – Turd

+1

Usando el "Patrón de delegación" aquí significa, el Empleado no calcula el salario por sí mismo, pero delega esto en el objeto de estrategia. No dice nada sobre los diferentes modelos de cálculo de salarios. "Patrón de estrategia" significa que tendrá diferentes subclases, una para cada tipo de cálculo de salario. No define dónde tiene lugar el cálculo (las diferentes subclases pueden proporcionar metadatos para ayudar al "Empleado" a hacer el cálculo correcto). Ambos patrones serán aplicables aquí, lo que yo creo es que la estrategia era lo que buscaba el entrevistador. –

1

Agregue una interfaz de SalaryCalculator y cree una instancia de un objeto SalaryCalculator durante la construcción del objeto Employee utilizando el tipo de salario. El objeto SalaryCalculaotr se hará cargo de los cálculos salariales para cada tipo de salario.

Cuestiones relacionadas