├── README.md ├── comportamiento ├── __init__.py ├── __pycache__ │ └── __init__.cpython-38.pyc ├── chain_of_resposability │ ├── __pycache__ │ │ ├── chain_of_responsability.cpython-38.pyc │ │ └── ejemplo_cadena.cpython-38.pyc │ ├── chain_of_responsability.py │ └── ejemplo_cadena.py ├── command │ ├── __pycache__ │ │ ├── command.cpython-38.pyc │ │ └── ejemplo_command.cpython-38.pyc │ ├── command.py │ └── ejemplo_command.py └── interpreter │ ├── __pycache__ │ ├── ejemplo_interpreter.cpython-38.pyc │ └── interpreter.cpython-38.pyc │ ├── ejemplo_interpreter.py │ └── interpreter.py ├── creacionales ├── __init__.py ├── __init__.pyc ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── __init__.cpython-38.pyc │ └── __init__.cpython-39.pyc ├── abstract_factory │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-38.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── ejemplo_abstract_factory.cpython-37.pyc │ │ ├── ejemplo_abstract_factory.cpython-38.pyc │ │ ├── ejemplo_abstract_factory.cpython-39.pyc │ │ ├── fabricas.cpython-37.pyc │ │ ├── fabricas.cpython-38.pyc │ │ ├── productos.cpython-37.pyc │ │ └── productos.cpython-38.pyc │ ├── ejemplo_abstract_factory.py │ ├── ejemplo_abstract_factory.pyc │ ├── fabricas.py │ ├── fabricas.pyc │ ├── productos.py │ └── productos.pyc ├── builder │ ├── __pycache__ │ │ ├── constructores.cpython-38.pyc │ │ └── tour.cpython-38.pyc │ ├── constructores.py │ ├── ejemplo_builder.py │ └── tour.py ├── factory_method │ ├── __pycache__ │ │ ├── creadores.cpython-38.pyc │ │ ├── creadores.cpython-39.pyc │ │ └── productos.cpython-38.pyc │ ├── creadores.py │ ├── ejemplo_factory_method.py │ └── productos.py ├── prototype │ ├── __pycache__ │ │ ├── ejemplo_prototype.cpython-38.pyc │ │ ├── fabrica.cpython-38.pyc │ │ └── prototipos.cpython-38.pyc │ ├── ejemplo_prototype.py │ ├── fabrica.py │ └── prototipos.py └── singleton │ ├── __pycache__ │ ├── ejemplo_singleton.cpython-37.pyc │ ├── ejemplo_singleton.cpython-38.pyc │ ├── singleton.cpython-37.pyc │ └── singleton.cpython-38.pyc │ ├── ejemplo_singleton.py │ └── singleton.py ├── estructurales ├── Composite │ ├── __pycache__ │ │ ├── composite.cpython-38.pyc │ │ └── ejemplo_composite.cpython-38.pyc │ ├── composite.py │ └── ejemplo_composite.py ├── __init__.py ├── __pycache__ │ └── __init__.cpython-38.pyc ├── adapter │ ├── __pycache__ │ │ ├── adapter.cpython-38.pyc │ │ └── ejemplo_adapter.cpython-38.pyc │ ├── adapter.py │ └── ejemplo_adapter.py ├── bridge │ ├── __pycache__ │ │ ├── bridge.cpython-38.pyc │ │ └── ejemplo_bridge.cpython-38.pyc │ ├── bridge.py │ └── ejemplo_bridge.py ├── decorator │ ├── __pycache__ │ │ ├── decorator.cpython-38.pyc │ │ └── ejemplo_decorator.cpython-38.pyc │ ├── decorator.py │ ├── decorator_2.py │ ├── decorator_3.py │ └── ejemplo_decorator.py ├── fachada │ ├── __pycache__ │ │ ├── ejemplo_fachada.cpython-38.pyc │ │ └── fachada.cpython-38.pyc │ ├── ejemplo_fachada.py │ └── fachada.py ├── flyweight │ ├── __pycache__ │ │ ├── ejemplo_flyweight.cpython-38.pyc │ │ └── flyweight.cpython-38.pyc │ ├── ejemplo_flyweight.py │ └── flyweight.py └── proxy │ ├── __pycache__ │ ├── ejemplo_proxy.cpython-38.pyc │ └── proxy.cpython-38.pyc │ ├── ejemplo_proxy.py │ └── proxy.py ├── imagenes ├── abstractfactory.png ├── adapter.png ├── bridge.png ├── builder.png ├── chainofresponsibility.png ├── command.png ├── composite.png ├── decorator.png ├── facade.png ├── factorymethod.png ├── flyweight.png ├── interpreter.png ├── iterator.png ├── mediator.png ├── memento.png ├── observer.png ├── prototype.png ├── proxy.png ├── singleton.png ├── state.png ├── strategy.png ├── templatemethod.png └── visitor.png └── principal.py /README.md: -------------------------------------------------------------------------------- 1 | # Patrones de Diseño 2 | ## Un primer acercamiento - generalidades 3 | 4 | *"Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice"* [Christopher Alexander]. 5 | 6 | ## Introducción 7 | 8 | El diseño de software orientado a objetos es, en cierta forma, difícil, si a esta tarea sumamos que el software diseñado debe tener ciertas características deseables como la reusabilidad, flexibilidad y portabilidad entre otras, la tarea es aun más difícil. 9 | 10 | Algo que conocen muy bien los diseñadores con cierta experiencia, es que no se puede afrontar cada problema desde cero, por lo general reutilizan soluciones que han trabajado en el pasado y que han representado buenas soluciones a los problemas planteados. 11 | 12 | Si estas soluciones les sirven de manera recurrente y estas les brindan las características deseables en el software mencionadas arriba, probablemente se encuentran ante un patrón de diseño. 13 | 14 | ## ¿Qué son los patrones de diseño? 15 | Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. 16 | 17 | Un patrón de diseño es una solución a un problema de diseño. 18 | 19 | Los patrones de diseño son un conjunto de prácticas de óptimo diseño que se utilizan para abordar problemas recurrentes en la programación orientada a objetos. 20 | 21 | El concepto de patrones de diseño fue el resultado de un trabajo realizado por un grupo de 4 personas Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides, (Gang of four) que se publicó en los 90s en un libro titulado "Design Patterns. Elements of Reusable Object-Oriented Software" en el que se esbozaban 23 patrones de diseño. 22 | 23 | Un patrón de diseño puede considerarse como un documento que define una estructura de clases que aborda una situación particular. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias. 24 | 25 | Los patrones de diseño representa un nivel de abstracción un poco mas elevado de lo que hasta ahora el estudiante esta habituado a trabajar, pero una vez entendido su funcionamiento y utilidad, los diseños serán mucho más flexibles, modulares y reutilizables. 26 | En esencia un patrón tiene los siguientes 4 elementos: 27 | 28 | - **Nombre del patrón:** describe el problema de diseño, su solución y consecuencias en una o dos palabras. 29 | - **El problema:** describe cuando aplicar el patrón, explica el problema y su contexto. 30 | - **La solución:** describe los elementos del diseño, sus relaciones, responsabilidades y colaboraciones. No describe la implementación o un diseño particular específicamente ya que se adapta mas a una plantilla (template) que puede ser aplicada a varias situaciones. 31 | - **Las consecuencias:** son los resultados de aplicar el patrón, los pros y contras de su aplicación. Las consecuencias de la aplicación de un patrón debe incluir el impacto en la flexibilidad, extensibilidad y/o portabilidad del sistema. 32 | 33 | ## Estructuras o plantillas de patrones 34 | Para describir un patrón se utilizan plantillas más o menos estandarizadas, de forma que se expresen uniformemente y puedan constituir efectivamente un medio de comunicación uniforme entre diseñadores. La plantilla más común es la utilizada precisamente por el “Gang of Four” y consta de los siguientes apartados: 35 | 36 | - **Nombre del patrón:** nombre estándar del patrón por el cual será reconocido en la comunidad (normalmente se expresan en inglés). 37 | - **Clasificación del patrón:** creacional, estructural o de comportamiento. 38 | - **Intención:** ¿Qué problema pretende resolver el patrón? 39 | - **También conocido como:** Otros nombres de uso común para el patrón. 40 | - **Motivación:** Escenario de ejemplo para la aplicación del patrón. 41 | - **Aplicabilidad:** Usos comunes y criterios de aplicabilidad del patrón. 42 | - **Estructura:** Diagramas de clases oportunos para describir las clases que intervienen en el patrón. 43 | - **Participantes:** Enumeración y descripción de las entidades abstractas (y sus roles) que participan en el patrón. 44 | - **Colaboraciones:** Explicación de las interrelaciones que se dan entre los participantes. 45 | - **Consecuencias:** Consecuencias positivas y negativas en el diseño derivadas de la aplicación del patrón. 46 | - **Implementación:** Técnicas o comentarios oportunos de cara a la implementación del patrón. 47 | - **Código de ejemplo:** Código fuente ejemplo de implementación del patrón. 48 | - **Usos conocidos:** Ejemplos de sistemas reales que usan el patrón. 49 | - **Patrones relacionados:** Referencias cruzadas con otros patrones. 50 | 51 | 52 | ## Tipos de patrones 53 | ### Patrones de creación 54 | Los patrones de creación abstraen la forma en la que se crean los objetos, permitiendo tratar las clases a crear de forma genérica dejando para más tarde la decisión de qué clases crear o cómo crearlas. 55 | 56 | - **Abstract Factory:** Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas. 57 | 58 | ![abstract factory](imagenes/abstractfactory.png) 59 | 60 | - **Builder:** Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones. 61 | 62 | ![builder](imagenes/builder.png) 63 | 64 | - **Factory Method:** Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos. 65 | 66 | ![factory method](imagenes/factorymethod.png) 67 | 68 | - **Prototype:** Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo. 69 | 70 | ![prototype](imagenes/prototype.png) 71 | 72 | - **Singleton:** Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella. 73 | 74 | ![singleton](imagenes/singleton.png) 75 | 76 | ### Patrones estructurales 77 | Tratan de conseguir que cambios en los requisitos de la aplicación no ocasionen cambios en las relaciones entre los objetos. Lo fundamental son las relaciones de uso entre los objetos, y, éstas están determinadas por las interfaces que soportan los objetos. 78 | 79 | Estudian como se relacionan los objetos en tiempo de ejecución. Sirven para diseñar las interconexiones entre los objetos. 80 | 81 | - **Adapter:** Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles. 82 | 83 | ![adapter](imagenes/adapter.png) 84 | 85 | - **Bridge:** Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. 86 | 87 | ![bridge](imagenes/bridge.png) 88 | 89 | - **Composite:** Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos. 90 | 91 | ![composite](imagenes/composite.png) 92 | 93 | - **Decorator:** Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad. 94 | 95 | ![decorator](imagenes/decorator.png) 96 | 97 | - **Facade:** Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar. 98 | 99 | ![facade](imagenes/facade.png) 100 | 101 | - **Flyweight:** Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente. 102 | 103 | ![flyweight](imagenes/flyweight.png) 104 | 105 | - **Proxy:** Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste. 106 | 107 | ![proxy](imagenes/proxy.png) 108 | 109 | 110 | ### Patrones de comportamiento 111 | Los patrones de comportamiento estudian las relaciones entre llamadas entre los diferentes objetos, normalmente ligados con la dimensión temporal. 112 | 113 | - **Chain of Responsibility:** Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto. 114 | 115 | ![chain of responsibility](imagenes/chainofresponsibility.png) 116 | 117 | - **Command:** Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones. 118 | 119 | ![command](imagenes/command.png) 120 | 121 | - **Interpreter:** Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje. 122 | 123 | ![interpreter](imagenes/interpreter.png) 124 | 125 | - **Iterator:** Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna. 126 | 127 | ![iterator](imagenes/iterator.png) 128 | 129 | - **Mediator:** Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente. 130 | 131 | ![mediator](imagenes/mediator.png) 132 | 133 | - **Memento:** Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde. 134 | 135 | ![memento](imagenes/memento.png) 136 | 137 | - **Observer:** Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos. 138 | 139 | ![observer](imagenes/observer.png) 140 | 141 | - **State:** Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto. 142 | 143 | ![state](imagenes/state.png) 144 | 145 | - **Strategy:** Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan. 146 | 147 | ![strategy](imagenes/strategy.png) 148 | 149 | - **Template Method:** Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura. 150 | 151 | ![templatemethod](imagenes/templatemethod.png) 152 | 153 | - **Visitor:** Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera. 154 | 155 | ![visitor](imagenes/visitor.png) 156 | 157 | 158 | ## Referencias bibliográficas 159 | 1. Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of Four) 160 | 2. Patrones de Diseño, Diseño de Software Orientado a Objetos - Joaquin Garcia. http://www.ingenierosoftware.com/analisisydiseno/patrones-diseno.php. 161 | 3. Patrones de diseño - http://es.kioskea.net/contents/genie-logiciel/design-patterns.php3. 162 | 4. Introducción al diseño con patrones – Miguel Lagos Torres. http://www.elrincondelprogramador.com/default.asp?pag=articulos/leer.asp&id=29. 163 | 5. Object Oriented Desing “Software Desing Principles and Design Patters, http://www.oodesing.com 164 | 165 | 166 | 167 | *Daza Corredor, Alejandro Paolo* 168 | 169 | - Ingeniero de Sistemas, egresado de la Universidad Distrital Francisco José de Caldas 170 | - Especialista de Ingeniería de Software de la Universidad Distrital Francisco José de Caldas. 171 | - Magister en ingeniería y dirección de sitios web de la Universidad Internacional de la Rioja 172 | 173 | - Docente del proyecto curricular de Ingeniería de Sistemas en el área de programación de la Universidad Distrital Francisco José de Caldas 174 | - Docente de la especialización en Ingeniería de Software de la Universidad Distrital Francisco José de Caldas 175 | -------------------------------------------------------------------------------- /comportamiento/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/__init__.py -------------------------------------------------------------------------------- /comportamiento/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/chain_of_resposability/__pycache__/chain_of_responsability.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/chain_of_resposability/__pycache__/chain_of_responsability.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/chain_of_resposability/__pycache__/ejemplo_cadena.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/chain_of_resposability/__pycache__/ejemplo_cadena.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/chain_of_resposability/chain_of_responsability.py: -------------------------------------------------------------------------------- 1 | class Handler: 2 | def __init__(self): 3 | self.__succesor__ = None 4 | 5 | def set_succesor(self, succesor): 6 | self.__succesor__ = succesor 7 | 8 | def handler_request(self, opt): 9 | pass 10 | 11 | 12 | class HandlerOptionOne(Handler): 13 | 14 | def handler_request(self, opt): 15 | if opt == 1: 16 | print("Domingo") 17 | else: 18 | self.__succesor__.handler_request(opt) 19 | 20 | class HandlerOptionTwo(Handler): 21 | 22 | def handler_request(self, opt): 23 | if opt == 2: 24 | print("Lunes") 25 | else: 26 | self.__succesor__.handler_request(opt) 27 | 28 | class HandlerOptionThree(Handler): 29 | 30 | def handler_request(self, opt): 31 | if opt == 3: 32 | print("Martes") 33 | else: 34 | self.__succesor__.handler_request(opt) 35 | 36 | class HandlerOptionFour(Handler): 37 | 38 | def handler_request(self, opt): 39 | if opt == 4: 40 | print("Miercoles") 41 | else: 42 | self.__succesor__.handler_request(opt) 43 | 44 | class HandlerOptionFive(Handler): 45 | 46 | def handler_request(self, opt): 47 | if opt == 5: 48 | print("Jueves") 49 | else: 50 | self.__succesor__.handler_request(opt) 51 | 52 | class HandlerOptionSix(Handler): 53 | 54 | def handler_request(self, opt): 55 | if opt == 6: 56 | print("Viernes") 57 | else: 58 | self.__succesor__.handler_request(opt) 59 | 60 | class HandlerOptionSeven(Handler): 61 | 62 | def handler_request(self, opt): 63 | if opt == 7: 64 | print("Sabado") 65 | else: 66 | self.__succesor__.handler_request(opt) 67 | 68 | class HandlerOptionDefault(Handler): 69 | 70 | def handler_request(self, opt): 71 | print("Opción no valida") -------------------------------------------------------------------------------- /comportamiento/chain_of_resposability/ejemplo_cadena.py: -------------------------------------------------------------------------------- 1 | from .chain_of_responsability import * 2 | 3 | class EjemploCadena: 4 | def obtener_nombre(self): 5 | return "Chain of responsability" 6 | 7 | def operacion(self): 8 | cadena = [HandlerOptionSix(), HandlerOptionTwo(), HandlerOptionThree(), HandlerOptionFour(), 9 | HandlerOptionFive(), HandlerOptionOne(), HandlerOptionSeven(), HandlerOptionDefault()] 10 | 11 | for i in range(len(cadena)-1): 12 | cadena[i].set_succesor(cadena[i+1]) 13 | 14 | opcion = int(input("ingrese un número: ")) 15 | cadena[0].handler_request(opcion) 16 | 17 | -------------------------------------------------------------------------------- /comportamiento/command/__pycache__/command.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/command/__pycache__/command.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/command/__pycache__/ejemplo_command.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/command/__pycache__/ejemplo_command.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/command/command.py: -------------------------------------------------------------------------------- 1 | class Command: 2 | def execute(self, recivier): 3 | pass 4 | 5 | class Recivier(): 6 | def show_message(self, msg): 7 | print(msg) 8 | 9 | class DomesticEngineer(Command): 10 | def execute(self, recivier): 11 | recivier.show_message("take out the trash") 12 | 13 | class Politician(Command): 14 | def execute(self, recivier): 15 | recivier.show_message("take the money from the rich, take the votes from poor") 16 | 17 | class Programmer(Command): 18 | def execute(self, recivier): 19 | recivier.show_message("sell the bugs, charge extra for the fixes") -------------------------------------------------------------------------------- /comportamiento/command/ejemplo_command.py: -------------------------------------------------------------------------------- 1 | from .command import * 2 | 3 | class EjemploCommand: 4 | def obtener_nombre(self): 5 | return "Command" 6 | 7 | def operacion(self): 8 | comandos = [Politician(), DomesticEngineer(), Programmer()] 9 | r = Recivier() 10 | for i in comandos: 11 | i.execute(r) -------------------------------------------------------------------------------- /comportamiento/interpreter/__pycache__/ejemplo_interpreter.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/interpreter/__pycache__/ejemplo_interpreter.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/interpreter/__pycache__/interpreter.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/comportamiento/interpreter/__pycache__/interpreter.cpython-38.pyc -------------------------------------------------------------------------------- /comportamiento/interpreter/ejemplo_interpreter.py: -------------------------------------------------------------------------------- 1 | from .interpreter import * 2 | 3 | class EjemploInterpreter: 4 | def obtener_nombre(self): 5 | return "Interpreter" 6 | 7 | def operacion(self): 8 | operacion = ExpresionPluss(left=ExpresionNumber(value='15'),right=ExpresionMinus(left=ExpresionNumber(value='25'), right=ExpresionNumber(value='5'))) 9 | 10 | print(operacion.evaluate()) -------------------------------------------------------------------------------- /comportamiento/interpreter/interpreter.py: -------------------------------------------------------------------------------- 1 | class Expresion: 2 | def __init__(self, value=None, left=None, right=None): 3 | self.__value__ = value 4 | self.__left__ = left 5 | self.__right__ = right 6 | 7 | class ExpresionNumber(Expresion): 8 | 9 | def evaluate(self): 10 | return int(self.__value__) 11 | 12 | class ExpresionPluss(Expresion): 13 | 14 | def evaluate(self): 15 | return self.__left__.evaluate() + self.__right__.evaluate() 16 | 17 | 18 | class ExpresionMinus(Expresion): 19 | 20 | def evaluate(self): 21 | return self.__left__.evaluate() - self.__right__.evaluate() -------------------------------------------------------------------------------- /creacionales/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/__init__.py -------------------------------------------------------------------------------- /creacionales/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/__init__.pyc -------------------------------------------------------------------------------- /creacionales/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__init__.py -------------------------------------------------------------------------------- /creacionales/abstract_factory/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__init__.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/ejemplo_abstract_factory.cpython-39.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/fabricas.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/fabricas.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/fabricas.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/fabricas.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/productos.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/productos.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/__pycache__/productos.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/__pycache__/productos.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/ejemplo_abstract_factory.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | from fabricas import * 5 | 6 | class EjemploAbstractFactory: 7 | def obtener_nombre(self): 8 | return "AbstractFactory" 9 | 10 | def operacion(self): 11 | print("Ejemplo Abstract Factory") 12 | print("seleccione una fabrica: \n\t " + 13 | "0 - AMD \n\t " + 14 | "1 - Intel \n\t " + 15 | "2 - Alien \n\t " + 16 | "3 - UD \n\t " + 17 | "4 - Fusion \n\t " + 18 | "5 - Razer ") 19 | fabricas = [FabricaAMD(), FabricaIntel(), 20 | FabricaAlien(), FabricaUD(), 21 | FabricaFusion(), FabricaRazer()] 22 | 23 | fabrica = fabricas[int(input())] 24 | 25 | partes = [fabrica.crearMemoria(), fabrica.crearProcesador(), 26 | fabrica.crearBoard(), fabrica.crearCooler()] 27 | 28 | for p in partes: 29 | p.implementacion() 30 | p.operacion() 31 | 32 | if __name__ == '__main__': 33 | ejemplo = EjemploAbstractFactory() 34 | ejemplo.operacion() -------------------------------------------------------------------------------- /creacionales/abstract_factory/ejemplo_abstract_factory.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/ejemplo_abstract_factory.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/fabricas.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | from abc import ABC, abstractmethod 5 | 6 | from productos import * 7 | 8 | class FabricaAbstracta(ABC): 9 | 10 | @abstractmethod 11 | def crearMemoria(self): 12 | pass 13 | @abstractmethod 14 | def crearProcesador(self): 15 | pass 16 | @abstractmethod 17 | def crearBoard(self): 18 | pass 19 | 20 | @abstractmethod 21 | def crearCooler(self): 22 | pass 23 | 24 | class FabricaAMD(FabricaAbstracta): 25 | 26 | def crearMemoria(self): 27 | return MemoriaAMD() 28 | 29 | def crearProcesador(self): 30 | return ProcesadorAMD() 31 | 32 | def crearBoard(self): 33 | return BoardAMD() 34 | 35 | def crearCooler(self): 36 | return CoolerAMD() 37 | 38 | class FabricaIntel(FabricaAbstracta): 39 | 40 | def crearMemoria(self): 41 | return MemoriaIntel() 42 | 43 | def crearProcesador(self): 44 | return ProcesadorIntel() 45 | 46 | def crearBoard(self): 47 | return BoardIntel() 48 | 49 | def crearCooler(self): 50 | return CoolerIntel() 51 | 52 | class FabricaAlien(FabricaAbstracta): 53 | 54 | def crearMemoria(self): 55 | return MemoriaAlien() 56 | 57 | def crearProcesador(self): 58 | return ProcesadorAlien() 59 | 60 | def crearBoard(self): 61 | return BoardAlien() 62 | 63 | def crearCooler(self): 64 | return CoolerAlien() 65 | 66 | class FabricaUD(FabricaAbstracta): 67 | 68 | def crearMemoria(self): 69 | return MemoriaUD() 70 | 71 | def crearProcesador(self): 72 | return ProcesadorUD() 73 | 74 | def crearBoard(self): 75 | return BoardUD() 76 | 77 | def crearCooler(self): 78 | return CoolerUD() 79 | 80 | class FabricaFusion(FabricaAbstracta): 81 | 82 | def crearMemoria(self): 83 | return MemoriaFusion() 84 | 85 | def crearProcesador(self): 86 | return ProcesadorFusion() 87 | 88 | def crearBoard(self): 89 | return BoardFusion() 90 | 91 | def crearCooler(self): 92 | return CoolerFusion() 93 | 94 | class FabricaRazer(FabricaAbstracta): 95 | 96 | def crearMemoria(self): 97 | return MemoriaRazer() 98 | 99 | def crearProcesador(self): 100 | return ProcesadorRazer() 101 | 102 | def crearBoard(self): 103 | return BoardRazer() 104 | 105 | def crearCooler(self): 106 | return CoolerRazer() 107 | -------------------------------------------------------------------------------- /creacionales/abstract_factory/fabricas.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/fabricas.pyc -------------------------------------------------------------------------------- /creacionales/abstract_factory/productos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from abc import ABC, abstractmethod 4 | 5 | class Memoria(ABC): 6 | def implementacion(self): 7 | print("instalando memoria") 8 | 9 | @abstractmethod 10 | def operacion(self): 11 | pass 12 | 13 | class Board(ABC): 14 | def implementacion(self): 15 | print("instalando board") 16 | 17 | @abstractmethod 18 | def operacion(self): 19 | pass 20 | 21 | class Procesador(ABC): 22 | def implementacion(self): 23 | print("instalando procesador") 24 | 25 | @abstractmethod 26 | def operacion(self): 27 | pass 28 | 29 | class Cooler(ABC): 30 | def implementacion(self): 31 | print("instalando cooler") 32 | 33 | @abstractmethod 34 | def operacion(self): 35 | pass 36 | 37 | class MemoriaAMD(Memoria): 38 | 39 | def operacion(self): 40 | print("operando memoria AMD") 41 | 42 | class BoardAMD(Board): 43 | 44 | def operacion(self): 45 | print("operando board AMD") 46 | 47 | class ProcesadorAMD(Procesador): 48 | 49 | def operacion(self): 50 | print("operando procesador AMD") 51 | 52 | class CoolerAMD(Cooler): 53 | 54 | def operacion(self): 55 | print("operando cooler AMD") 56 | 57 | class MemoriaIntel(Memoria): 58 | 59 | def operacion(self): 60 | print("operando memoria Intel") 61 | 62 | class BoardIntel(Board): 63 | 64 | def operacion(self): 65 | print("operando board Intel") 66 | 67 | class ProcesadorIntel(Procesador): 68 | 69 | def operacion(self): 70 | print("operando procesador Intel") 71 | 72 | class CoolerIntel(Cooler): 73 | 74 | def operacion(self): 75 | print("operando cooler Intel") 76 | 77 | class MemoriaAlien(Memoria): 78 | 79 | def operacion(self): 80 | print("operando memoria Alien") 81 | 82 | class BoardAlien(Board): 83 | 84 | def operacion(self): 85 | print("operando board Alien") 86 | 87 | class ProcesadorAlien(Procesador): 88 | 89 | def operacion(self): 90 | print("operando procesador Alien") 91 | 92 | class CoolerAlien(Cooler): 93 | 94 | def operacion(self): 95 | print("operando cooler Alien") 96 | 97 | class MemoriaUD(Memoria): 98 | 99 | def operacion(self): 100 | print("operando memoria UD") 101 | 102 | class BoardUD(Board): 103 | 104 | def operacion(self): 105 | print("operando board UD") 106 | 107 | class ProcesadorUD(Procesador): 108 | 109 | def operacion(self): 110 | print("operando procesador UD") 111 | 112 | class CoolerUD(Cooler): 113 | 114 | def operacion(self): 115 | print("operando cooler UD") 116 | 117 | class MemoriaFusion(Memoria): 118 | 119 | def operacion(self): 120 | print("operando memoria Fusion") 121 | 122 | class BoardFusion(Board): 123 | 124 | def operacion(self): 125 | print("operando board Fusion") 126 | 127 | class ProcesadorFusion(Procesador): 128 | 129 | def operacion(self): 130 | print("operando procesador Fusion") 131 | 132 | class CoolerFusion(Cooler): 133 | 134 | def operacion(self): 135 | print("operando cooler Fusion") 136 | 137 | class MemoriaRazer(Memoria): 138 | 139 | def operacion(self): 140 | print("operando memoria Razer") 141 | 142 | class BoardRazer(Board): 143 | 144 | def operacion(self): 145 | print("operando board Razer") 146 | 147 | class ProcesadorRazer(Procesador): 148 | 149 | def operacion(self): 150 | print("operando procesador Razer") 151 | 152 | class CoolerRazer(Cooler): 153 | 154 | def operacion(self): 155 | print("operando cooler Razer") -------------------------------------------------------------------------------- /creacionales/abstract_factory/productos.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/abstract_factory/productos.pyc -------------------------------------------------------------------------------- /creacionales/builder/__pycache__/constructores.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/builder/__pycache__/constructores.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/builder/__pycache__/tour.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/builder/__pycache__/tour.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/builder/constructores.py: -------------------------------------------------------------------------------- 1 | import abc 2 | 3 | 4 | from abc import ABC, abstractmethod 5 | from tour import Tour 6 | 7 | class ConstructorTour(ABC): 8 | @abstractmethod 9 | def construir_tour(self): 10 | pass 11 | 12 | @abstractmethod 13 | def agregar_hoteles(self): 14 | pass 15 | 16 | @abstractmethod 17 | def agregar_lugares(self): 18 | pass 19 | 20 | def get_tour(self): 21 | return self.tour 22 | 23 | class CundinamarcaTour(ConstructorTour): 24 | def construir_tour(self): 25 | self.tour = Tour("Cundinamarca") 26 | 27 | def agregar_hoteles(self): 28 | self.tour.add_hotel("Bogotá Inn") 29 | self.tour.add_hotel("La Mesa Inn") 30 | self.tour.add_hotel("Zipa Inn") 31 | 32 | def agregar_lugares(self): 33 | self.tour.add_place("Bogotá") 34 | self.tour.add_place("La Mesa") 35 | self.tour.add_place("Zipaquirá") 36 | 37 | class EuropaTour(ConstructorTour): 38 | def construir_tour(self): 39 | self.tour = Tour("Europa") 40 | 41 | def agregar_hoteles(self): 42 | self.tour.add_hotel("Paris Inn") 43 | 44 | 45 | def agregar_lugares(self): 46 | self.tour.add_place("Torre Eiffel") 47 | self.tour.add_place("Louvre") 48 | self.tour.add_place("Arc de Triomphe") 49 | 50 | class Agencia(): 51 | def __init__(self, construtor): 52 | self.constructor = construtor 53 | self.constructor.construir_tour() 54 | self.constructor.agregar_hoteles() 55 | self.constructor.agregar_lugares() 56 | 57 | def get_tour(self): 58 | return self.constructor.get_tour() -------------------------------------------------------------------------------- /creacionales/builder/ejemplo_builder.py: -------------------------------------------------------------------------------- 1 | from constructores import * 2 | 3 | class EjemploBuilder: 4 | def obtener_nombre(self): 5 | return "Builder" 6 | 7 | def operacion(self): 8 | print("Ejemplo del builder") 9 | agencia = Agencia(EuropaTour()) 10 | tour = agencia.get_tour() 11 | tour.mostrar_info() 12 | 13 | if __name__ == "__main__": 14 | ejemplo = EjemploBuilder() 15 | ejemplo.operacion() -------------------------------------------------------------------------------- /creacionales/builder/tour.py: -------------------------------------------------------------------------------- 1 | 2 | class Tour(): 3 | def __init__(self, name): 4 | self.name = name 5 | self.places = [] 6 | self.hotels = [] 7 | 8 | def add_place(self, place): 9 | self.places.append(place) 10 | 11 | def add_hotel(self, hotel): 12 | self.hotels.append(hotel) 13 | 14 | def mostrar_info(self): 15 | print("Tour:", self.name) 16 | print("Places:", self.places) 17 | print("Hotels:", self.hotels) 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /creacionales/factory_method/__pycache__/creadores.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/factory_method/__pycache__/creadores.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/factory_method/__pycache__/creadores.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/factory_method/__pycache__/creadores.cpython-39.pyc -------------------------------------------------------------------------------- /creacionales/factory_method/__pycache__/productos.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/factory_method/__pycache__/productos.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/factory_method/creadores.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | from productos import * 4 | 5 | class Creador(ABC): 6 | 7 | def crear_producto(self): 8 | return self.factory_method() 9 | 10 | @abstractmethod 11 | def factory_method(self): 12 | pass 13 | 14 | class CreadorConcreto1(Creador): 15 | 16 | def factory_method(self): 17 | return ProductoConcreto1() 18 | 19 | class CreadorConcreto2(Creador): 20 | 21 | def factory_method(self): 22 | return ProductoConcreto2() -------------------------------------------------------------------------------- /creacionales/factory_method/ejemplo_factory_method.py: -------------------------------------------------------------------------------- 1 | from creadores import * 2 | 3 | class EjemploFactoryMethod(): 4 | def obtener_nombre(self): 5 | return "Factory Method" 6 | 7 | def operacion(self): 8 | creador = CreadorConcreto2() 9 | producto = creador.crear_producto() 10 | print(producto.operacion()) 11 | 12 | if __name__ == "__main__": 13 | ejemplo = EjemploFactoryMethod() 14 | ejemplo.operacion() -------------------------------------------------------------------------------- /creacionales/factory_method/productos.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | class Producto(ABC): 4 | 5 | @abstractmethod 6 | def operacion(self): 7 | pass 8 | 9 | class ProductoConcreto1(Producto): 10 | 11 | def operacion(self): 12 | return "Operacion de Producto concreto 1" 13 | 14 | class ProductoConcreto2(Producto): 15 | 16 | def operacion(self): 17 | return "Operacion de Producto concreto 2" -------------------------------------------------------------------------------- /creacionales/prototype/__pycache__/ejemplo_prototype.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/prototype/__pycache__/ejemplo_prototype.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/prototype/__pycache__/fabrica.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/prototype/__pycache__/fabrica.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/prototype/__pycache__/prototipos.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/prototype/__pycache__/prototipos.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/prototype/ejemplo_prototype.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | from .fabrica import AnimalCreator 5 | 6 | class EjemploPrototype: 7 | def obtener_nombre(self): 8 | return "Prototype" 9 | 10 | def operacion(self): 11 | print("Ejemplo prototype") 12 | creator = AnimalCreator() 13 | animals = [] 14 | for i in range(4): 15 | animals.append(creator.retrieve_animal("Chicken")) 16 | for i in range(4): 17 | animals.append(creator.retrieve_animal("Sheep")) 18 | 19 | for i in animals: 20 | print(i.hello_animal()) 21 | 22 | animals[4].change_owner("Alejandro") 23 | 24 | for i in animals: 25 | print(i.hello_animal()) -------------------------------------------------------------------------------- /creacionales/prototype/fabrica.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from .prototipos import Sheep, Chicken, Owner 4 | 5 | class AnimalCreator(): 6 | def __init__(self): 7 | self.__chicken__ = Chicken() 8 | self.__sheep__ = Sheep() 9 | 10 | self.__chicken__.set_owner(Owner("Juan")) 11 | self.__chicken__.set_description("a litle chicken") 12 | self.__chicken__.set_name("chicken") 13 | self.__chicken__.set_number_of_legs(2) 14 | 15 | self.__sheep__.set_owner(Owner("Juan")) 16 | self.__sheep__.set_description("a litle sheep") 17 | self.__sheep__.set_name("sheep") 18 | self.__sheep__.set_number_of_legs(4) 19 | 20 | def retrieve_animal(self, kind_of_animal): 21 | if "Chicken" == kind_of_animal: 22 | return self.__chicken__.clone() 23 | elif "Sheep" == kind_of_animal: 24 | return self.__sheep__.clone() 25 | return None -------------------------------------------------------------------------------- /creacionales/prototype/prototipos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from abc import ABC, abstractmethod 4 | from copy import copy, deepcopy 5 | 6 | class Animal(ABC): 7 | 8 | def __init__(self): 9 | self.__description__ = "" 10 | self.__number_of_legs__ = 0 11 | self.__name__ = "" 12 | self.__owner__ = None 13 | 14 | def hello_animal(self): 15 | return "hi i am a " + self.__name__ + " and i have " + str(self.__number_of_legs__) + " legs, property of: " + self.__owner__.get_name() 16 | 17 | def set_owner(self, owner): 18 | self.__owner__ = owner; 19 | 20 | def get_owner(self): 21 | return self.__owner__ 22 | 23 | def change_owner(self, name): 24 | self.__owner__.set_name(name) 25 | 26 | 27 | def set_description(self, description): 28 | self.__description__ = description; 29 | 30 | def get_description(self): 31 | return self.__description__ 32 | 33 | def get_name(self): 34 | return self.__name__ 35 | 36 | def set_name(self, name): 37 | self.__name__ = name; 38 | 39 | def get_number_of_legs(self): 40 | return self.__number_of_legs__ 41 | 42 | def set_number_of_legs(self, number_of_legs): 43 | self.__number_of_legs__ = number_of_legs 44 | 45 | def clone(self): 46 | return deepcopy(self) 47 | 48 | class Sheep(Animal): 49 | pass 50 | 51 | class Chicken(Animal): 52 | pass 53 | 54 | class Owner(): 55 | 56 | def __init__(self, name): 57 | self.__name__ = name 58 | 59 | def get_name(self): 60 | return self.__name__; 61 | 62 | def set_name(self, name): 63 | self.__name__ = name; 64 | 65 | -------------------------------------------------------------------------------- /creacionales/singleton/__pycache__/ejemplo_singleton.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/singleton/__pycache__/ejemplo_singleton.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/singleton/__pycache__/ejemplo_singleton.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/singleton/__pycache__/ejemplo_singleton.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/singleton/__pycache__/singleton.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/singleton/__pycache__/singleton.cpython-37.pyc -------------------------------------------------------------------------------- /creacionales/singleton/__pycache__/singleton.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/creacionales/singleton/__pycache__/singleton.cpython-38.pyc -------------------------------------------------------------------------------- /creacionales/singleton/ejemplo_singleton.py: -------------------------------------------------------------------------------- 1 | from singleton import Singleton 2 | 3 | class EjemploSingleton: 4 | def obtener_nombre(self): 5 | return "Singleton" 6 | 7 | def operacion(self): 8 | print("Ejemplo Singleton") 9 | x = Singleton.get_instance() 10 | y = Singleton.get_instance() 11 | 12 | 13 | print( x is y) 14 | 15 | y.set_value(10) 16 | 17 | print(x.get_value()) 18 | 19 | if __name__ == "__main__": 20 | ejemplo = EjemploSingleton() 21 | ejemplo.operacion() -------------------------------------------------------------------------------- /creacionales/singleton/singleton.py: -------------------------------------------------------------------------------- 1 | class Singleton(): 2 | 3 | _instance = None 4 | _value = 0 5 | 6 | @classmethod 7 | def get_instance(cls): # Constructor alternativo que retorna una nueva instancia 8 | if not cls._instance: 9 | cls._instance = cls() 10 | return cls._instance 11 | 12 | def get_value(self): 13 | return self._value 14 | 15 | def set_value(self, v): 16 | self._value = v -------------------------------------------------------------------------------- /estructurales/Composite/__pycache__/composite.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/Composite/__pycache__/composite.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/Composite/__pycache__/ejemplo_composite.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/Composite/__pycache__/ejemplo_composite.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/Composite/composite.py: -------------------------------------------------------------------------------- 1 | class Componente(): 2 | 3 | def operacion(self): 4 | pass 5 | 6 | class Compuesto(Componente): 7 | 8 | def __init__(self): 9 | self.__elementos__ = [] 10 | 11 | def operacion(self): 12 | print("operacion de compuesto") 13 | for e in self.__elementos__: 14 | e.operacion() 15 | 16 | def agregar_elemento(self, elemento): 17 | self.__elementos__.append(elemento) 18 | 19 | class Simple(Componente): 20 | 21 | def operacion(self): 22 | print("operacion simple") -------------------------------------------------------------------------------- /estructurales/Composite/ejemplo_composite.py: -------------------------------------------------------------------------------- 1 | from .composite import * 2 | 3 | class EjemploComposite: 4 | def obtener_nombre(self): 5 | return "Composite" 6 | 7 | def operacion(self): 8 | print("Ejemplo composite") 9 | 10 | elemento = Compuesto() 11 | 12 | for i in range(5): 13 | elemento.agregar_elemento(Simple()) 14 | 15 | elemento2 = Compuesto() 16 | elemento2.agregar_elemento(Simple()) 17 | 18 | elemento.agregar_elemento(elemento2) 19 | elemento.operacion() -------------------------------------------------------------------------------- /estructurales/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/__init__.py -------------------------------------------------------------------------------- /estructurales/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/adapter/__pycache__/adapter.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/adapter/__pycache__/adapter.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/adapter/__pycache__/ejemplo_adapter.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/adapter/__pycache__/ejemplo_adapter.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/adapter/adapter.py: -------------------------------------------------------------------------------- 1 | class Adaptado(): 2 | 3 | def escribir_reves(self): 4 | return "retpada ed olpmeje nU" 5 | 6 | class Objetivo(): 7 | 8 | def escribir(self): 9 | pass 10 | 11 | class Original(Objetivo): 12 | 13 | def escribir(self): 14 | return "Un ejemplo de adapter" 15 | 16 | class Adaptador(Objetivo): 17 | 18 | def __init__(self): 19 | self.__adaptado__ = Adaptado() 20 | 21 | def escribir(self): 22 | return "(Traduccion) " + ((self.__adaptado__.escribir_reves())[::-1]) 23 | -------------------------------------------------------------------------------- /estructurales/adapter/ejemplo_adapter.py: -------------------------------------------------------------------------------- 1 | from .adapter import * 2 | 3 | class EjemploAdapter: 4 | def obtener_nombre(self): 5 | return "Adapter" 6 | 7 | def operacion(self): 8 | print("Ejemplo adapter") 9 | 10 | print("Objeto original") 11 | original = Original() 12 | print(original.escribir()) 13 | 14 | print("Objeto a adaptar") 15 | adaptado = Adaptado() 16 | print(adaptado.escribir_reves()) 17 | 18 | print("Objeto adaptado") 19 | adaptador = Adaptador() 20 | print(adaptador.escribir()) 21 | 22 | -------------------------------------------------------------------------------- /estructurales/bridge/__pycache__/bridge.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/bridge/__pycache__/bridge.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/bridge/__pycache__/ejemplo_bridge.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/bridge/__pycache__/ejemplo_bridge.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/bridge/bridge.py: -------------------------------------------------------------------------------- 1 | class Abstraccion(): 2 | def __init__(self, implementador): 3 | self.__imp__ = implementador 4 | 5 | def operacion(self): 6 | return self.__imp__.operacion_implementada() 7 | 8 | class AbstraccionRefinada(Abstraccion): 9 | 10 | def operacion_refinada(self): 11 | return self.__imp__.operacion_implementada_refinada() 12 | 13 | class Implementador(): 14 | def operacion_implementada(self): 15 | pass 16 | 17 | class ImplementadorRefinado(Implementador): 18 | def operacion_implementada_refinada(self): 19 | pass 20 | 21 | class ImplementadorConcretoA(Implementador): 22 | 23 | def operacion_implementada(self): 24 | return "operacion concreta A" 25 | 26 | class ImplementadorConcretoB(Implementador): 27 | 28 | def operacion_implementada(self): 29 | return "operacion concreta B" 30 | 31 | class ImpelmentadorConcretoC(ImplementadorRefinado): 32 | 33 | def operacion_implementada(self): 34 | return "operacion concreta C" 35 | 36 | def operacion_implementada_refinada(self): 37 | return "operacion refinada C" -------------------------------------------------------------------------------- /estructurales/bridge/ejemplo_bridge.py: -------------------------------------------------------------------------------- 1 | from .bridge import * 2 | 3 | class EjemploBridge: 4 | def obtener_nombre(self): 5 | return "Bridge" 6 | 7 | def operacion(self): 8 | print("Ejemplo bridge") 9 | 10 | objeto = Abstraccion(ImplementadorConcretoB()) 11 | print(objeto.operacion()) 12 | 13 | objeto_refinado = AbstraccionRefinada(ImpelmentadorConcretoC()) 14 | print(objeto_refinado.operacion()) 15 | print(objeto_refinado.operacion_refinada()) -------------------------------------------------------------------------------- /estructurales/decorator/__pycache__/decorator.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/decorator/__pycache__/decorator.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/decorator/__pycache__/ejemplo_decorator.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/decorator/__pycache__/ejemplo_decorator.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/decorator/decorator.py: -------------------------------------------------------------------------------- 1 | class Componente(): 2 | def operacion(self): 3 | pass 4 | 5 | class ComponenteConcreto(Componente): 6 | def operacion(self): 7 | print("operacion concreta") 8 | 9 | class Decorador(Componente): 10 | def __init__(self, componente): 11 | self.__comp__ = componente 12 | 13 | def operacion(self): 14 | pass 15 | 16 | 17 | class DecoradorConcretoA(Decorador): 18 | def operacion(self): 19 | print("operacion decorada por A") 20 | self.__comp__.operacion() 21 | 22 | class DecoradorConcretoB(Decorador): 23 | def operacion(self): 24 | print("operacion decorada por B") 25 | self.__comp__.operacion() -------------------------------------------------------------------------------- /estructurales/decorator/decorator_2.py: -------------------------------------------------------------------------------- 1 | def decorador(funcion): 2 | def operacion(): 3 | print("ejecutando operacion") 4 | funcion() 5 | 6 | return operacion 7 | 8 | @decorador 9 | def operacion_externa(): 10 | print("operacion externa") 11 | 12 | @decorador 13 | def operacion2(): 14 | print("operacion2") 15 | 16 | operacion_externa() 17 | operacion2() -------------------------------------------------------------------------------- /estructurales/decorator/decorator_3.py: -------------------------------------------------------------------------------- 1 | class Decorator(object): 2 | """Clase de decorador simple.""" 3 | def __init__(self, func): 4 | self.func = func 5 | 6 | def __call__(self, *args, **kwargs): 7 | print('Antes de ser llamada la función.') 8 | retorno = self.func(*args, **kwargs) 9 | print('Despues de ser llamada la función.') 10 | print(retorno) 11 | return retorno 12 | 13 | @Decorator 14 | def function(): 15 | print('Dentro de la función.') 16 | return "Retorno" 17 | 18 | function() -------------------------------------------------------------------------------- /estructurales/decorator/ejemplo_decorator.py: -------------------------------------------------------------------------------- 1 | from .decorator import * 2 | 3 | class EjemploDecorator: 4 | def obtener_nombre(self): 5 | return "Decorator" 6 | 7 | def operacion(self): 8 | print("Ejemplo decorator") 9 | 10 | objeto = ComponenteConcreto() 11 | objeto.operacion() 12 | print("-"*10) 13 | decorador1 = DecoradorConcretoA(objeto) 14 | decorador1.operacion() 15 | print("-"*10) 16 | decorador2 = DecoradorConcretoB(decorador1) 17 | decorador2.operacion() -------------------------------------------------------------------------------- /estructurales/fachada/__pycache__/ejemplo_fachada.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/fachada/__pycache__/ejemplo_fachada.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/fachada/__pycache__/fachada.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/fachada/__pycache__/fachada.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/fachada/ejemplo_fachada.py: -------------------------------------------------------------------------------- 1 | from .fachada import * 2 | 3 | class EjemploFachada: 4 | def obtener_nombre(self): 5 | return "Fachada" 6 | 7 | def operacion(self): 8 | print("Ejemplo fachada") 9 | 10 | fachada = Fachada() 11 | 12 | print(fachada.buscar_libros()) 13 | print(fachada.buscar_musica()) 14 | print(fachada.buscar_videos()) 15 | -------------------------------------------------------------------------------- /estructurales/fachada/fachada.py: -------------------------------------------------------------------------------- 1 | class BibliotecaLibros: 2 | def buscar_libros(self): 3 | return "buscando libros" 4 | 5 | class BibliotecaMusica: 6 | def buscar_musica(self): 7 | return "buscando musica" 8 | 9 | class BibliotecaVideos: 10 | def buscar_videos(self): 11 | return "buscando videos" 12 | 13 | class Fachada: 14 | def __init__(self): 15 | self.biblioteca_libros = BibliotecaLibros() 16 | self.biblioteca_musica = BibliotecaMusica() 17 | self.biblioteca_videos = BibliotecaVideos() 18 | 19 | def buscar_libros(self): 20 | return self.biblioteca_libros.buscar_libros() 21 | 22 | def buscar_musica(self): 23 | return self.biblioteca_musica.buscar_musica() 24 | 25 | def buscar_videos(self): 26 | return self.biblioteca_videos.buscar_videos() -------------------------------------------------------------------------------- /estructurales/flyweight/__pycache__/ejemplo_flyweight.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/flyweight/__pycache__/ejemplo_flyweight.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/flyweight/__pycache__/flyweight.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/flyweight/__pycache__/flyweight.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/flyweight/ejemplo_flyweight.py: -------------------------------------------------------------------------------- 1 | from .flyweight import * 2 | 3 | class EjemploFlyweight: 4 | def obtener_nombre(self): 5 | return "Flyweight" 6 | 7 | def operacion(self): 8 | print("Ejemplo flyweight") 9 | 10 | factoria = FlyweightFactory() 11 | 12 | flyweights = [] 13 | 14 | for i in range(10): 15 | flyweights.append(factoria.entregar_flyweight()) 16 | 17 | print(flyweights[0].concreto == flyweights[2].concreto) 18 | 19 | for f in flyweights: 20 | print(f.operacion()) -------------------------------------------------------------------------------- /estructurales/flyweight/flyweight.py: -------------------------------------------------------------------------------- 1 | class Flyweight: 2 | 3 | def operacion(self): 4 | pass 5 | 6 | class ConcreteFlyweight(Flyweight): 7 | 8 | def operacion(self): 9 | return "Operación del peso ligero concreto clear" 10 | 11 | class UnshareFlyweight(Flyweight): 12 | 13 | def __init__(self, concreto, contador): 14 | self.concreto = concreto 15 | self.contador = contador 16 | 17 | def operacion(self): 18 | return self.concreto.operacion() + str(self.contador) 19 | 20 | class FlyweightFactory: 21 | def __init__(self): 22 | self.concreto = None 23 | self.contador = 0 24 | 25 | def entregar_flyweight(self): 26 | if self.concreto == None: 27 | self.concreto = ConcreteFlyweight() 28 | self.contador += 1 29 | return UnshareFlyweight(self.concreto, self.contador) -------------------------------------------------------------------------------- /estructurales/proxy/__pycache__/ejemplo_proxy.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/proxy/__pycache__/ejemplo_proxy.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/proxy/__pycache__/proxy.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/estructurales/proxy/__pycache__/proxy.cpython-38.pyc -------------------------------------------------------------------------------- /estructurales/proxy/ejemplo_proxy.py: -------------------------------------------------------------------------------- 1 | from .proxy import * 2 | 3 | class EjemploProxy: 4 | def obtener_nombre(self): 5 | return "Proxy" 6 | 7 | def operacion(self): 8 | print("Ejemplo proxy") 9 | 10 | proxy = Proxy(RealSubject()) 11 | 12 | print(proxy.peticion()) -------------------------------------------------------------------------------- /estructurales/proxy/proxy.py: -------------------------------------------------------------------------------- 1 | class Subject: 2 | 3 | def peticion(self): 4 | pass 5 | 6 | class RealSubject(Subject): 7 | 8 | def peticion(self): 9 | return "operación del objeto real" 10 | 11 | class Proxy(Subject): 12 | def __init__(self, objeto): 13 | self.objeto = objeto 14 | 15 | def peticion(self): 16 | return "Mediante el proxy -> " + self.objeto.peticion() -------------------------------------------------------------------------------- /imagenes/abstractfactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/abstractfactory.png -------------------------------------------------------------------------------- /imagenes/adapter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/adapter.png -------------------------------------------------------------------------------- /imagenes/bridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/bridge.png -------------------------------------------------------------------------------- /imagenes/builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/builder.png -------------------------------------------------------------------------------- /imagenes/chainofresponsibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/chainofresponsibility.png -------------------------------------------------------------------------------- /imagenes/command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/command.png -------------------------------------------------------------------------------- /imagenes/composite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/composite.png -------------------------------------------------------------------------------- /imagenes/decorator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/decorator.png -------------------------------------------------------------------------------- /imagenes/facade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/facade.png -------------------------------------------------------------------------------- /imagenes/factorymethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/factorymethod.png -------------------------------------------------------------------------------- /imagenes/flyweight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/flyweight.png -------------------------------------------------------------------------------- /imagenes/interpreter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/interpreter.png -------------------------------------------------------------------------------- /imagenes/iterator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/iterator.png -------------------------------------------------------------------------------- /imagenes/mediator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/mediator.png -------------------------------------------------------------------------------- /imagenes/memento.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/memento.png -------------------------------------------------------------------------------- /imagenes/observer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/observer.png -------------------------------------------------------------------------------- /imagenes/prototype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/prototype.png -------------------------------------------------------------------------------- /imagenes/proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/proxy.png -------------------------------------------------------------------------------- /imagenes/singleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/singleton.png -------------------------------------------------------------------------------- /imagenes/state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/state.png -------------------------------------------------------------------------------- /imagenes/strategy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/strategy.png -------------------------------------------------------------------------------- /imagenes/templatemethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/templatemethod.png -------------------------------------------------------------------------------- /imagenes/visitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apdaza/patrones-gof-python/f20ebfc5bce1d333629a543dbdf3c21b3234a0a6/imagenes/visitor.png -------------------------------------------------------------------------------- /principal.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | from creacionales.abstract_factory.ejemplo_abstract_factory import EjemploAbstractFactory 5 | from creacionales.singleton.ejemplo_singleton import EjemploSingleton 6 | from creacionales.factory_method.ejemplo_factory_method import EjemploFactoryMethod 7 | from creacionales.prototype.ejemplo_prototype import EjemploPrototype 8 | from estructurales.adapter.ejemplo_adapter import EjemploAdapter 9 | from estructurales.bridge.ejemplo_bridge import EjemploBridge 10 | from estructurales.Composite.ejemplo_composite import EjemploComposite 11 | from estructurales.decorator.ejemplo_decorator import EjemploDecorator 12 | from estructurales.proxy.ejemplo_proxy import EjemploProxy 13 | from estructurales.fachada.ejemplo_fachada import EjemploFachada 14 | from estructurales.flyweight.ejemplo_flyweight import EjemploFlyweight 15 | from comportamiento.chain_of_resposability.ejemplo_cadena import EjemploCadena 16 | from comportamiento.command.ejemplo_command import EjemploCommand 17 | from comportamiento.interpreter.ejemplo_interpreter import EjemploInterpreter 18 | 19 | 20 | if __name__ == '__main__': 21 | patrones = [EjemploSingleton(), EjemploAbstractFactory(), 22 | EjemploFactoryMethod(), EjemploPrototype(), 23 | EjemploAdapter(), EjemploBridge(), EjemploComposite(), 24 | EjemploDecorator(), EjemploProxy(), EjemploFachada(), 25 | EjemploFlyweight(), EjemploCadena(), EjemploCommand(), 26 | EjemploInterpreter()] 27 | cont = 0 28 | for p in patrones: 29 | print(str(cont) + " -> " + p.obtener_nombre()) 30 | cont += 1 31 | 32 | opcion = int(input("Ingrese una opcion: ")) 33 | 34 | ejemplo = patrones[opcion] 35 | ejemplo.operacion() 36 | --------------------------------------------------------------------------------