1 / 27

Patrones de Diseño

Patrones de Diseño. Carolina Perozo Julio Padrón Anthony Accardi. Factory Method. Patrón de Creación Propósito : Define una interfaz para crear un objeto pero deja que sean las subclases quienes decidan la clase del objeto a crear Tambien conocido como Virtual Constructor.

russ
Télécharger la présentation

Patrones de Diseño

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi

  2. Factory Method

  3. Patrón de Creación Propósito: Define unainterfazparacrear un objetoperodejaqueseanlassubclasesquienesdecidan la clase del objeto a crear Tambienconocidocomo Virtual Constructor Factory Method

  4. Sea un framework para la construcción de editores de documentos de distintostipos Clasesabstractas Application y Document Los clientesdeberánheredar de ellasparaimplementar los detalles de cadaaplicaciónconcreta PorejemploDrawingApplication y DrawingDocument ¿Como se implementa la opción New del menú? ¿Como sabe la clase Application quétipoconcreto de documentodebecrear? Motivación Factory Method

  5. ¿Cuáles el problema? Se nospresenta el dilema de que el framework esquiensabe, a través de suclase Application, cuándo se debecrear un nuevodocumento, pero no sabequédocumentocrear (sóloconoce a la claseabstracta o interfaz Document) Solución: Encapsularel conocimiento de cuáles la subclaseconcreta del documento a crear y mover eseconocimientofuera del framework Motivación Factory Method

  6. Motivación Ejemplo Factory Method

  7. Útil cuando: Una clase no puede anticipar la clase de objetos que debe crear. Una clase quiere que sus subclases especifiquen los objetos a crear. Aplicabilidad Factory Method

  8. Estructura UML Factory Method

  9. Product (Document) Define la interfaz de los objetos creados por el método de fabricación. Concrete Product (MyDocument) Implementa la interfaz Product. Creator (Application) Declara el método de fabricación, que devuelve un objetode tipo Product. Puede definir una implementación que devuelva el producto concreto predeterminado. Puede llamar a dicho método para crear un objeto producto. ConcreteCreator (MyApplication) Redefine el método de fabricación para devolver un objeto ConcreteProduct. Actores Factory Method

  10. El creador se apoya en sus subclases para definir el método de fabricación que devuelve el objeto apropiado Colaboración Factory Method

  11. Elimina la necesidad de enlazar clases especificas de la aplicación en el código Sólo maneja la interfaz Product Por lo que permite añadir cualquier clase ConcreteProduct definida por el usuario. Permite escribir algoritmos genéricos que funcionan con cualquier ConcrteProduct Inconveniente: Tener que crear una subclase de Creator en los casos en los que esta no fuese necesaria de no aplicar el patrón Consecuencias Factory Method

  12. Abstract Factory

  13. Abstract Factory • El patrón AbstractFactory ofrece una interfaz para la creación de familias de productos relacionados o dependientes sin especificar las clases concretas a las que pertenecen. • Problema Aborda el problema de la creación de familias de objetos (como por ejemplo iterfaces gráficos) que comparten toda una serie de características comunes. • Aplicabilidad El uso de este patrón está recomendado para situaciones en las que tenemos una familia de productos concretos y prevemos la inclusión de distintas familias de productos en un futuro.

  14. Estructura Abstract Factory

  15. Participantes Abstract Factory • AbstractFactory (WidgetFactory): Declara un interfaz para las operaciones de creación de objetos de productos abstractos. • ConcreteFactory (MotifWidgetFactory, PMWidgetFactory): Implementa las operaciones para la creación de objetos de productos concretos. • AbstractProduct (Window, ScrollBar): Declara una interfaz para los objetos de un tipo de productos. • ConcreteProduct (MotifWindow, MotifScrollBar): Define un objeto de producto que creará la correspondiente Concrete Factory, a la vez que implementa la interfaz de AbstractProduct. • Client: Usa solamente las interfaces declaradas por las clases AbstractFactory y AbstractProduct.

  16. Aplicabilidad Abstract Factory Usar cuando: • Un sistema debe ser independiente de cómo se crean, componen y representan sus productos. • Un sistema debe ser configurado con una familia de productos entre varias. • Una familia de objetos producto relacionados está diseñada para ser usada conjuntamente y es necesario hacer cumplir esa restricción. • Se quiere proporcionar una biblioteca de clases de productos y sólo se quiere revelar sus interfaces, no sus implementaciones.

  17. Ejemplo Abstract Factory

  18. Consecuencias Abstract Factory • Ventajas: • Aisla las clases de implementacion: ayuda a controlar los objetos que se creen y encapsula la responsabilidad de creación. • Hace fácil el intercambio de familias de productos sin mezclarse, permitiendo configurar un sistema con una de entre varias familias de productos: Cambio de factory Cambio de familia. • Fomenta la consistencia entre productos.

  19. Consecuencias Abstract Factory • Desventajas: • Puede ser difícil incorporar nuevos tipos de productos (cambiar AbstractFactory y sus factorias concretas).

  20. Iterator

  21. Iterator • Definición El patrón ITERATOR define una interfaz que declara los métodos necesarios para acceder de forma secuencial a una colección de objetos. Las clases que utilizan esta interfaz para acceder a los objetos lo hacen de forma independiente de la clase que implementa la interfaz. El acceso a la estructura interna de la colección a través de la interfaz del iterador hace que ésta permanezca oculta. • Objetivo Proveer una forma de tener acceso secuencial a los elementos de un objeto agregado sin tener que exponer su representación interna.

  22. Iterator • Aplicaciones • Para acceder a los contenidos de los objetos incluidos en un agregado sin exponer su estructura. • Para poder soportar diversas formas de recorrer un agregado de objetos. • Para ofrecer una interfaz uniforme para recorrer distintos tipos de estructuras de agregación. • Tipos • Iteradores externos: el cliente avanza solicitando una operación de cada elemento. • Iteradores internos: el cliente le proporciona al iterador la operación que debe aplicar sobre todos los elementos.

  23. Estructura Iterator

  24. Iterator • Participantes • Iterador: Define la interfaz para acceder y recorrer los elementos de un agregado. • IteradorConcreto: Implementa la interfaz del iterador y guarda la posición actual del recorrido en cada momento. • Agregado: Define una interfaz para crear un objeto iterador. • AgregadoConcreto: Implementa la interfaz de creación de iteradores devolviendo una instancia del iterador concreto apropiado. • Consecuencias • Soporta distintas formas de recorrer un agregado. • Los iteradores simplifican la interfaz de los agregados. • Es posible recorrer un mismo agregado utilizando más de un iterador al mismo tiempo

  25. Iterator

  26. class List{public:  List ();  int Count() const;  int &Get(int index) {return info[index];}  int Read(int index);  ~List() {delete info;}private:  int *info;}; class Iterator{public:        virtual void First(){}        virtual void Next(){}        virtual int IsDone(){ return 0; }        virtual int CurrentItem(){ return 0; }}; class BackIterator: virtual public Iterator{public:        BackIterator(List* aBack);        BackIterator(List* aBack,int c=0);        void First();        void Next();        int IsDone();        int CurrentItem();private:        List* _back;        int _current;}; class ListIterator: virtual public Iterator{public:        ListIterator(List* aList,int c=0);        void First();        void Next();        int IsDone();        int CurrentItem();private:        List* _list;        int _current;};

  27. Iterator • Cuando un cliente desee recorrer una lista hacia adelante o hacia atrás crea una instancia de ListIterator o de BackIterator y realiza el recorrido de la siguiente manera: (Suponiendo que la instancia es iter)                 for (iter->First() ; !iter->IsDone() ; iter->Next())           {                    // Aquí se realizan las operaciones que se deseen              }

More Related