Java - ayuda con patrones de diseño

 
Vista:

ayuda con patrones de diseño

Publicado por Bryan (1 intervención) el 16/03/2018 14:07:41
A ver si alguien me puede dar una mano con este ejemplo:
Se realiza una venta de productos, los productos pueden ser A,B, o C, y se le puede vender a clientes X, Y, y a cada producto se le hace un descuento dependiendo del producto que sea y el cliente que lo compre, por lo que tengo 6 reglas distintas.
Yo pense en armar un strategy descuento, y las 6 combinaciones tendrian cada una una concreteStrategy, lo que quiero es tener en la clase venta un metodo que me calcule el descuento total, tomando una lista de productos y que use esas strategys, el problema es como hago para que decida ante un producto y cliente la strategy a usar.
Aclaro: no quiero usar condicionales, necesito que sea escalable.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda con patrones de diseño

Publicado por Agustin (170 intervenciones) el 20/03/2018 02:44:38
Como dijo Peter Norvig, "los patrones de diseño son errores o falencias de tu lenguaje de programación".

Lo que planteás no es nada más que seleccionar qué función ejecutar ante una determinada condición, lo cuál es extremadamente sencillo en lenguajes modernos. Por supuesto java es un lenguaje inferior, con enormes carencias y deficiencias, con lo cual necesita los llamados "patrones de diseño" por todos lados para compensar su enorme ineptitud.

Te dejo un ejemplo de como se haria esto en un lenguaje moderno y usable: http://tpcg.io/NZ1c1p

Por supuesto que en mi ejemplo el cálculo de descuento son funciones sencillas y por ende están escritas in line, pero nada te impide definir para cada caso una función o incluso un módulo entero, dependiendo la complejidad de las operaciones que necesites hacer.

Dicho esto, y considerando la terrible limitación de tener que usar un lenguaje arcaico e inservible como java, tenés basicamente 3 opciones:

1 - poner un monton de if... else
2 - meter las diferentes implementaciones en una lista e iterar la lista hasta encontrar la que sirva para determinado producto/cliente.
3 - usar reflection o IOC y levantar dinamicamente la implementacion correcta según el producto/cliente.

de todas esas, por supuesto que la forma más recomendada es la siguiente:

4 - olvidarte de java para siempre y usar lenguajes modernos y capaces.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-4
Comentar