Está en la página 1de 4

Singleton.

Su intención consiste en garantizar que una clase solo tenga una instancia y
proporcionar un punto de acceso global a ella. El patrón singleton se implementa
creando en nuestra clase un método que crea una instancia del objeto solo si
todavía no existe alguna. Para asegurar que la clase no puede ser instanciada
nuevamente se regula el alcance del constructor (con modificadores de acceso
como protegido o privado). La instrumentación del patrón puede ser delicada en
programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear
la instancia al mismo tiempo y esta no existe todavía, solo uno de ellos debe lograr
crear el objeto. La solución clásica para este problema es utilizar exclusión mutua
en el método de creación de la clase que implementa el patrón. Las situaciones más
habituales de aplicación de este patrón son aquellas en las que dicha clase controla
el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en
modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los
demás objetos de la aplicación.

Ventajas.
 En el modo singleton, solo hay una instancia del singleton activo y todas las
instanciaciones de la clase singleton obtienen la misma instancia. Esto evita
que otros objetos se instalen a sí mismos y garantiza que todos los objetos
accedan a una instancia.
 El modo singleton tiene un cierto grado de escalabilidad, la clase en sí
controla el proceso de creación de instancias y la clase tiene la
escalabilidad correspondiente cuando se cambia el proceso de creación de
instancias.
 Dado que solo hay un objeto en la memoria del sistema, los recursos del
sistema se pueden guardar y el modo singleton, sin duda, puede mejorar el
rendimiento del sistema cuando los objetos que se deben crear y destruir
con frecuencia.
Desventajas.

 No es adecuado para cambiar objetos. Si los objetos del mismo tipo


siempre cambian en diferentes escenarios de casos de uso, los singleton
provocarán errores de datos y no podrán guardar el estado de los demás.
 Dado que no existe una capa de abstracción en el modelo de interés
simple, la expansión de la clase singleton es muy difícil.
 La responsabilidad de la clase singleton es demasiado pesada, lo que viola
el "principio de responsabilidad única" hasta cierto punto
Builder
se usa para permitir la creación de una variedad de objetos complejos desde un
objeto fuente (Producto), el objeto fuente se compone de una variedad de partes
que contribuyen individualmente a la creación de cada objeto complejo a través de
un conjunto de llamadas secuenciales a una implementación específica que
extienda la clase Abstract Builder. Así, cada implementación existente de Abstract
Builder construirá un objeto complejo Producto de una forma diferente deseada.

Ventajas.

• Reduce el acoplamiento.
• Permite variar la representación interna de estructuras complejas,
respetando la interfaz común de la clase Builder.
• Se independiza el código de construcción de la representación. Las clases
concretas que tratan las representaciones internas no forman parte de la
interfaz del Builder.

Desventajas.
 Hay que crear un Builder Conrecto para cada representación de un producto,
lo que puede acabar con multitud de clases.
 Las clases productos que construye el Builder deben ser mutables
 No garantiza que los campos de la clase producto estén inicializados.

Factory
Es un patrón de diseño creacional que proporciona una interfaz para crear objetos
en una superclase, mientras permite a las subclases alterar el tipo de objetos que
se crearán. El patrón de Diseño Factory Method tiene como función abordar el
problema de crear objetos sin tener que especificar la clase exacta a la que han de
pertenecer y sin tener que acceder directamente a la lógica de creación.

Ventajas
• Elimina la necesidad de instanciar de forma explícita los objetos que se van
a utilizar, lo que tiene ventajas claras en el desacoplamiento e
interdependencia de las clases.
• Permite encapsular en las clases factorías toda la lógica de creación de
objetos, que pueden ser más complejas que realizar un simple new.
• Es fácilmente extensible ya que la arquitectura queda abierta a desarrollos
horizontales con nuevas clases que extiendan a la factoría y a la familia de
productos. Respondiendo de esta manera al principio SOLID de Open/Close.

Desventajas
• Puesto que la factoría la emplearemos para, habitualmente, crear objetos
que heredan de una clase común, puede que necesitemos bastante
boilerplate code en cada una de las subclases.
• Al delegar funciones puede ser más complejo encontrar en primera instancia
la mecánica de funcionamiento de la aplicación.
• Al tratarse de un patrón que aborda operaciones frecuentes de un
programador, es fácil caer en la tentación de aplicarlo indebidamente.

Adapter.
se utiliza para transformar una interfaz en otra, de tal modo que una clase que no
pueda utilizar la primera haga uso de ella a través de la segunda. Convierte la
interfaz de una clase en otra interfaz que el cliente espera. El adaptador permite a
las clases trabajar juntas, lo que de otra manera no podría hacerse debido a sus
interfaces incompatibles.

Ventajas.
• Encapsula la implementación específica en la clase de adaptador, que es
transparente para la clase de cliente y mejora la reutilización del adaptador.
• Al usar el archivo de configuración, puede reemplazar fácilmente el
adaptador y también puede agregar una nueva clase de adaptador sin
modificar el código original, que cumple completamente con el "principio de
apertura y cierre".
• Desacopla la clase de destino y la clase de adaptador, Introduciendo una
clase de adaptador para reutilizar la clase de adaptador existente sin
modificar el código original.
Desventajas.
• Para los lenguajes que no admiten herencia múltiple, como máximo se
puede adaptar una clase de adaptador a la vez, y la clase abstracta de
destino solo puede ser una clase abstracta, no una clase concreta Su uso
tiene ciertas limitaciones, No es posible adaptar una clase de adaptador y
sus subclases a la interfaz de destino
• Como muchos patrones, añade complejidad al diseño. Hay quién dice que
este patrón es un parche, utilizado en malos diseños.
• Difícil de restringir los componentes de un compuesto.

Observer
Define una dependencia del tipo uno a muchos entre objetos, de manera que
cuando uno de los objetos cambia su estado, notifica este cambio a todos los
dependientes. Se trata de un patrón de comportamiento (existen de tres tipos:
creación, estructurales y de comportamiento), por lo que está relacionado con
algoritmos de funcionamiento y asignación de responsabilidades a clases y
objetos.

Ventaja.
• La principal ventaja es que proporciona un diseño ligeramente acoplado
entre los objetos que interactúan.
• Esto quiere decir que los objetos no conocen mucho del otro. El observado
sólo conoce la interfaz que implementan los observadores, para agregar o
quitar observadores no hay que modificar al observado y ambas clases
pueden utilizarse de manera independiente (observado y observador).
• No se especifica el receptor de una actualización. Se envía a todos los
objetos interesados
Desventajas.
• La fuga de memoria es gran y capaz que única desventaja. Esto se debe a
que para agregar o quitar observadores se tiene que hacer de manera
explícita. Aunque no se utilicen más los observadores sigue quedando la
referencia para notificarlo y esto hace que el recolector de basura no lo
elimine.
• el código fuente del sujeto a menudo no revela qué observadores están
siendo informados.
• Facilita el cambio de familias de productos, ya que la clase
• concreta sólo aparece una vez en el código de la aplicación y es
• fácil cambiarla.

También podría gustarte