Ejemplos de patrones de diseño para construir sistemas con buenas cualidades de programación orientada a objetos basados en el libro Head First Design Patterns.
El patrón estrategia permite:
- Definir una familia de algoritmos.
- Encapsular cada algoritmo y lo hace intercambiable.
- Que el algoritmo varíe independientemente del cliente que lo use.
Código completo AdventureGame.
import strategy.KnifeBehavior;
public class Main {
public static void main(String[] args) {
Character king = new King();
king.fight();
king.setWeapon(new KnifeBehavior());
king.fight();
Character queen = new Queen();
queen.fight();
queen.fight();
}
}
Attacking with Sword ⚔!
Attacking with Knife 🔪!
Attacking with Bow and Arrow 🏹!
Attacking with Bow and Arrow 🏹!
El patrón observador permite:
- Crear una dependencia de uno a muchos entre objetos.
- Cuando un objeto actualiza su estado, todos los demás objetos que dependen de él son notificados y actualizados automáticamente.
Código completo WeatherStation.
public class Main {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData);
StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);
weatherData.registerObserver(statisticsDisplay);
weatherData.registerObserver(forecastDisplay);
weatherData.setMeasurements(19, 46, 28.31f);
weatherData.setMeasurements(30, 45, 28.31f);
weatherData.setMeasurements(28, 43, 28.28f);
weatherData.removeObserver(forecastDisplay);
weatherData.setMeasurements(31, 45, 29.30f);
}
}
Current conditions: 19.0C degrees and 46.0% humidity.
Avg/Max/Min temperature = 19.0/19.0/19.0.
More of the same.
Current conditions: 30.0C degrees and 45.0% humidity.
Avg/Max/Min temperature = 24.5/30.0/19.0.
More of the same.
Current conditions: 28.0C degrees and 43.0% humidity.
Avg/Max/Min temperature = 25.666666/30.0/19.0.
Watch out for cooler, rainy weather.
Current conditions: 31.0C degrees and 45.0% humidity.
Avg/Max/Min temperature = 27.0/31.0/19.0.
El patrón decorador permite:
- Asignar responsabilidades adicionales a un objeto de forma dinámica.
- Provee una alternativa flexible a subclases para extender funcionalidades.
Código completo StarbuzzCoffee.
public class Main {
public static void main(String[] args) {
Beverage beverage1 = new Espresso();
System.out.println(beverage1.getDescription() + " $" + beverage1.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription() + " $" + beverage2.cost());
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
System.out.println(beverage3.getDescription() + " $" + beverage3.cost());
Beverage beverage4 = new Whip(new Mocha(new Soy(new HouseBlend())));
System.out.println(beverage4.getDescription() + " $" + beverage4.cost());
}
}
Espresso ☕ $1.99
Most Excellent Dark Roast ☕, Mocha, Mocha, Whip $1.49
House Blend Coffee ☕, Soy, Mocha, Whip $1.34
House Blend Coffee ☕, Soy, Mocha, Whip $1.34