- Cristian Camilo Gomez Fernandez
Este proyecto contiene ejemplos practicos de los 5 principios SOLID en Java, con pruebas unitarias en JUnit 5 y construccion con Maven.
Para evitar confusion, este README separa:
- Patrones de diseno implementados: los que ya aparecen en el codigo actual.
- Patrones de diseno aplicables: los que se pueden implementar como mejora en los retos.
Implementacion actual:
Invoice: datos y calculo total de factura.InvoicePrinter: impresion de factura.InvoiceDatabaseSaver: persistencia de factura.
Patrones implementados:
- Ningun patron GoF explicito.
Patrones aplicables en retos:
Facade: unificar operaciones de factura en una sola interfaz.Decorator: agregar formatos o comportamientos extra de impresion.
Implementacion actual:
DiscountStrategy(interfaz).RegularCustomerDiscountyVipCustomerDiscount.DiscountCalculatorrecibe cualquier estrategia.
Patrones implementados:
Strategy(implementado): el calculo de descuento cambia segun la estrategia inyectada.
Patrones aplicables en retos:
Abstract Factory: construir familias de descuentos por tipo de cliente.Decorator: combinar descuentos acumulables sin modificar clases existentes.
Implementacion actual:
DrivableyRefuelablecomo contratos separados.Carimplementa ambos.ElectricCarimplementa soloDrivable.
Patrones implementados:
- Ningun patron GoF explicito.
Patrones aplicables en retos:
Adapter: integrar vehiculos con interfaces heredadas.Bridge: separar tipo de propulsion y capacidad de conduccion.
Implementacion actual:
WorkableyEatablecomo interfaces pequenas.Botimplementa soloWorkable.DeveloperimplementaWorkableyEatable.
Patrones implementados:
- Ningun patron GoF explicito.
Patrones aplicables en retos:
Adapter: adaptar clases antiguas a interfaces mas especificas.
Implementacion actual:
Database(abstraccion).MySQLDatabase(implementacion concreta).OrderProcessordepende deDatabasevia constructor.
Patrones implementados:
Dependency Injection(implementado):OrderProcessorrecibe la dependencia por constructor.
Patrones aplicables en retos:
Abstract Factory: creacion de repositorios o proveedores de BD por entorno.Repository: encapsular acceso a datos de dominio.
Ejecutar todos:
mvn clean testEjecutar por principio:
mvn test -Dtest=SRPTest
mvn test -Dtest=OCPTest
mvn test -Dtest=LSPTest
mvn test -Dtest=ISPTest
mvn test -Dtest=DIPTest- En
pom.xml, configurar la clase principal:
<configuration>
<mainClass>com.example.solid.PRINCIPIO.GoodExample</mainClass>
</configuration>-
Reemplazar
PRINCIPIOpor:srp,ocp,lsp,ispodip. -
Ejecutar:
mvn clean compile
mvn exec:java