Beruflich Dokumente
Kultur Dokumente
Documentación
25 DE OCTUBRE DE 2018
PROGRAMACION DE APLICACIONES
GIBRAN ENRIQUE SALAZAR VILLARREAL
1
Introducción
Los patrones de diseño representan las mejores prácticas utilizadas por
desarrolladores experimentados de software orientados a objetos. Los patrones de
diseño son soluciones a problemas generales que los desarrolladores de software
enfrentaron durante el desarrollo de software. Estas soluciones fueron obtenidas
por prueba y error por numerosos desarrolladores de software durante un período
de tiempo bastante importante.
En este documento se mostrarán cada uno de los patrones de diseño solicitadas,
explicando sus ventajas y desventajas, así como mostrando un ejemplo practica
de cada patrón, y explicando la estructura, implementación y funcionalidad de
cada uno de ellos.
2
Contenido
Abstract Factory.................................................................................................................................. 3
Factory Method ................................................................................................................................ 10
Singleton ........................................................................................................................................... 15
Prototype .......................................................................................................................................... 19
Builder ............................................................................................................................................... 24
Adapter ............................................................................................................................................. 31
Bridge ................................................................................................................................................ 36
Composite ......................................................................................................................................... 42
Decorator .......................................................................................................................................... 44
Facade ............................................................................................................................................... 49
Flyweight........................................................................................................................................... 54
Proxy ................................................................................................................................................. 58
Chain of responsibility ...................................................................................................................... 62
Command .......................................................................................................................................... 66
Interpreter ........................................................................................................................................ 70
Iterator .............................................................................................................................................. 74
Mediator ........................................................................................................................................... 78
Memento .......................................................................................................................................... 82
Observer............................................................................................................................................ 86
State .................................................................................................................................................. 90
Strategy ............................................................................................................................................. 95
Template method ........................................................................................................................... 100
Visitor .............................................................................................................................................. 104
3
Abstract Factory
El primer patrón de diseño del que se hablara es el Abstract Factory.
Ventajas:
Aísla las clases de implementación: ayuda a controlar los objetos que se creen y
encapsula la responsabilidad y el proceso de creación de objetos producto.
Desventajas:
3.- Después creamos una segunda Interfaz para los colores que tendrán los
objetos.
5.- Después se crea una clase abstracta para obtener fábricas para objetos de color
(Interfaz) y forma (Interfaz).
7.- Después se crea una clase de generador / productor de Fábrica para obtener
fábricas al pasar una información como Forma o Color
Factory Method
Ventajas
Se gana en flexibilidad, pues crear los objetos dentro de una clase con un "Método
de Fábrica" es siempre más flexible que hacerlo directamente, debido a que se
elimina la necesidad de atar nuestra aplicación unas clases de productos
concretos.
Desventajas
Square.java
Circle.java
12
3.- Creamos una Fábrica para generar un objeto de clase concreta basado en la
información dada.
ShapeFactory.java
13
4.- Utilice la Fábrica para obtener un objeto de clase concreta pasando una
información como tipo.
FactoryPatternDemo.java
Singleton
Ventajas
Espacio de nombres reducido: Es una mejora sobre las variables globales. Evita
contaminar el espacio de nombres con variables globales que almacenan las
instancias.
Permite un número variable de instancias: Hace que sea fácil permitir más de una
instancia de la clase. Solo se necesitaría cambiar la operación que otorga acceso
a la instancia del Singleton.
Desventajas
SingleObject.java
SingletonPatternDemo.java
17
Prototype
Ventajas
Desventajas
Implementación
1.- Crear una clase abstracta implementando la interfaz Clonable.
Shape.java
Square.java
21
Circle.java
3.- Cree una clase para obtener clases concretas de la base de datos y
almacénelas en un Hashtable.
ShapeCache.java
22
PrototypePatternDemo.java
Builder
Implementación.
1.- Cree un elemento de interfaz que represente el alimento y el embalaje.
Item.java
Packing.java
Wrapper.java
26
Bottle.java
Burger.java
27
ColdDrink.java
ChickenBurger.java
28
Coke.java
Pepsi.java
29
5.- Cree una clase de comida que tenga objetos de artículo definidos anteriormente.
Meal.java
6.- Cree una clase MealBuilder, la clase constructora real responsable de crear
objetos Meal.
MealBuilder.java
BuilderPatternDemo.java
Luego creamos una clase de comidas con ArrayList del artículo y un MealBuilder
para construir diferentes tipos de objetos de comida mediante la combinación del
artículo. BuilderPatternDemo , nuestra clase de demostración usará MealBuilder
para construir una Comida .
31
Adapter
El sexto patrón de diseño del que se hablara es el Adapter.
Ventajas
A nivel de clases...
Facilidad para redefinir el comportamiento de la clase adaptada.
Simplicidad (un sólo objeto, no hay punteros ni indirecciones adicionales).
A nivel de objetos...
Flexibilidad para que un sólo adaptador trabaje con muchas clases a adaptar (en
concreto, puede hacerlo con toda una jerarquía de clases).
Extensibilidad, puesto que se pueden añadir funcionalidades a todas las clases
adaptadas a la vez.
Desventajas
A nivel de clases...
Inflexibilidad, puesto que un sólo adaptador no puede trabajar con una clase y sus
hijos a la vez.
A nivel de objetos...
Dificultad para redefinir el comportamiento de la clase adaptada.
32
Implementación
MediaPlayer.java
VlcPlayer.java
33
Mp4Player.java
MediaAdapter.java
34
AudioPlayer.java
AdapterPatternDemo.java
Para lograr que la clase AudioPlayer pueda reproducir otros formatos también, se
creó una clase de adaptador MediaAdapter que implementa la interfaz MediaPlayer
y utiliza objetos AdvancedMediaPlayer para reproducir el formato requerido.
Bridge
DrawAPI.java
RedCircle.java
38
GreenCircle.java
5.- Usa las clases Shape y DrawAPI para dibujar círculos de diferentes colores.
BridgePatternDemo.java
40
Composite
Decorator
Shape.java
45
Rectangle.java
Circle.java
ShapeDecorator.java
46
DecoratorPatternDemo.java
47
Facade
Shape.java
50
Rectangle.java
Square.java
51
Circle.java
ShapeMaker.java
52
FacadePatternDemo.java
Flyweight
Shape.java
Circle.java
55
3.- Cree una fábrica para generar un objeto de clase concreta basado en
la información dada.
ShapeFactory.java
FlyweightPatternDemo.java
56
Proxy
Imagen.java
RealImage.java
ProxyImage.java
60
ProxyPatternDemo.java
Chain of responsibility
El sexto patrón de diseño del que se hablara es el Chain of responsibility.
Ventajas
Reduce el acoplamiento: Libera a un objeto de tener que saber que otro objeto
maneja una petición. Ni el emisor ni el receptor se conocen y tampoco tienen que
conocer la estructura de la cadena. Simplifica las interconexiones entre objetos.
En vez de que los objetos mantengan referencias a todos los posibles receptores,
solo tienen una única referencia a su sucesor (Ventaja).
Añade flexibilidad para asignar responsabilidades a objetos : Se pueden añadir o
cambiar responsabilidades para tratar una petición modificando la cadena en
tiempo de ejecución (Ventaja).
Desventajas
AbstractLogger.java
ConsoleLogger.java
ErrorLogger.java
FileLogger.java
64
ChainPatternDemo.java
Command
Order.java
Stock.java
67
BuyStock.java
Broker.java
68
CommandPatternDemo.java
6- Verificar la salida.
69
Interpreter
Limitación en el tipo de gramáticas (y, por extensión, de problemas) para los que
sirve esta aproximación: simples y sin grandes necesidades de eficiencia. Aunque
el uso de otros patrones puede mitigar este problema, hay circunstancias en que
un Intérprete no es lo más apropiado.
Expression.java
71
TerminalExpression.java
OrExpression.java
IntérpretePatternDemo.java
72
Iterator
Iterator.java
Container.java
75
NameRepository.java
IteratorPatternDemo.java
76
Mediator
ChatRoom.java
79
Usuario.java
3.- Utilice el objeto Usuario para mostrar las comunicaciones entre ellos.
MediatorPatternDemo.java
80
Memento
Los mementos son costosos, es costoso crear los objetos Memento si se tiene
que almacenar todas las partes del estado del Originator.
Memento.java
83
Originator.java
CareTaker.java
84
MementoPatternDemo.java
Observer
Subject.java
Observer.java
87
BinaryObserver.java
OctalObserver.java
88
ObserverPatternDemo.java
State
State.java
91
StartState.java
StopState.java
92
Context.java
StatePatternDemo.java
93
Strategy
Stategy.java
OperationAdd.java
96
OperationSubstract.java
OperationMultiply.java
97
Context.java
StrategyPatternDemo.java
98
Template method
Template method
1.- Crear una clase abstracta con un método de plantilla siendo final.
Juego.java
Cricket.java
101
Football.java
3.- Utilice el juego 's plantilla de método play () para demostrar de una
manera definida de jugar el juego.
TemplatePatternDemo.java
102
Visitor
ComputerPart.java
105
Teclado.java
Monitor.java
106
Mouse.java
Computer.java
107
ComputerPartVisitor.java
ComputerPartDisplayVisitor.java
108
VisitorPatternDemo.java
Conclusión
Con la realización de este reporte pude aprender que para cada tipo de
problemática existe un patrón de diseño que proporciona una solución óptima
para la resolución del problema, también puedo concluir que cada patrón se utiliza
de forma específica dependiendo de las circunstancias del problema y cada
patrón tiene sus ventajas y desventajas, algunos patrones pueden
complementarse con otros para resolver un problema determinado.