Red de conocimiento de abogados - Derecho de sociedades - Resumen de patrones de diseño de Java comunes para estudiantes universitarios

Resumen de patrones de diseño de Java comunes para estudiantes universitarios

Patrones de diseño comunes de Java vienen y echa un vistazo

1 Patrón de método de fábrica de creación:

(1) Patrón de fábrica simple:

Cree una clase de fábrica y defina una interfaz para crear clases de productos que implementen la misma interfaz.

(2) Patrón de método de fábrica:

El patrón de método de fábrica es una mejora del patrón de fábrica simple. La desventaja de la fábrica simple es que no cumple con la "apertura". y principio de cierre"

(3) Modo de método de fábrica estático:

El modo de fábrica estático hace que los métodos en el modo de método de fábrica sean estáticos. No es necesario crear una instancia, solo llámalo directamente.

2. Creación-Patrón de fábrica abstracto:

El patrón de fábrica abstracto se utiliza principalmente para crear familias de objetos relacionados. Cuando es necesario diseñar una familia de productos para que funcione en conjunto, el patrón de fábrica abstracto puede garantizar que el cliente siempre utilice solo objetos de la misma familia de productos: y al aislar la generación de clases específicas, el cliente no necesita especificar explícitamente la clase específica. generación.clase; todas las fábricas concretas implementan la interfaz pública definida en la fábrica abstracta, por lo que solo necesita cambiar la instancia de la fábrica concreta para cambiar el comportamiento de todo el sistema de software hasta cierto punto.

Sin embargo, la desventaja de este modo es que es más problemático agregar nuevos comportamientos. Si necesita agregar un nuevo objeto de familia de productos, debe cambiar la interfaz y todas sus subclases, lo que inevitablemente sucederá. causar muchos problemas.

3. Modo de creación-constructor:

El modo de creación descompone los pasos de creación de productos complejos en diferentes métodos para hacer que el proceso de creación sea más claro y controlar la complejidad con mayor precisión. objetos aislando la construcción y el uso de objetos complejos, es decir, separando la creación de productos de los productos mismos, de modo que el mismo proceso de construcción pueda crear diferentes objetos y cada constructor específico sea independiente entre sí, por lo que puede hacerlo; Es muy conveniente reemplazar el constructor de concreto o agregar un nuevo constructor de concreto. Los usuarios pueden obtener diferentes objetos de producto usando diferentes constructores de concreto.

4. Modo de creación-singleton

El modo singleton puede garantizar que solo haya una instancia de una determinada clase en el sistema, y ​​que la clase se instancia a sí misma y proporciona la información pública de ella. esta instancia a todo el sistema Punto de acceso: A excepción del punto de acceso público, no se puede acceder a la instancia por otros medios. La ventaja del modo singleton es que solo hay un objeto de instancia de uso común en el sistema, sin necesidad de crear y destruir objetos con frecuencia, lo que ahorra recursos del sistema, mejora el rendimiento del sistema y controla estrictamente cómo y cuándo los clientes acceden al objeto singleton. Hay varias formas de escribir el patrón singleton, y hay tres tipos principales: singleton de estilo perezoso, singleton de estilo hambriento y singleton de estilo de registro.

5. Modo de creación de prototipo:

En Java, el núcleo del modo prototipo es la clase prototipo Prototipo. La clase Prototipo debe cumplir las dos condiciones siguientes: implementar Cloneable. interfaz:

Anule el método clone() en la clase Object para devolver una copia del objeto; el método clone() en la clase Object tiene como valor predeterminado una copia superficial si desea una copia profunda. objeto, necesitas usar clone() Personaliza tu propia lógica de copia en el método. Copia superficial: después de copiar un objeto, las variables del tipo de datos básicos se recrearán y el tipo de referencia aún apunta a la dirección de memoria a la que apunta el objeto original. Copia profunda: después de copiar un objeto, se recrean tanto los tipos de datos básicos como los tipos de referencia.

Usar el modo prototipo para crear objetos no solo simplifica los pasos de creación de objetos, sino que también tiene un rendimiento mucho mejor que crear objetos usando el nuevo método, porque el método clone() de la clase Object es un método local. que opera directamente sobre los objetos en la memoria. La diferencia en el rendimiento de los flujos binarios, especialmente al copiar objetos grandes, es muy obvia.

Modo de adaptador estructural

El modo de adaptador. se utiliza principalmente para convertir una clase o interfaz en lo que el cliente quiere. El formato permite que clases originalmente incompatibles trabajen juntas, desacoplando la clase de destino y la clase de adaptador; también se ajusta al "principio de apertura y cierre" y nuevas clases de adaptador; se puede agregar sin modificar el código original; la implementación específica está encapsulada en la clase de adaptador, que es transparente para la clase de cliente y mejora la reutilización del adaptador. Sin embargo, la desventaja es que el proceso de implementación de reemplazo del adaptador es relativamente complicado. .

Por lo tanto, el modo adaptador es más adecuado para los siguientes escenarios:

(1) El sistema necesita usar clases existentes, pero las interfaces de estas clases no se ajustan al sistema. interfaz

(2) Cuando se utilizan componentes de terceros, la definición de la interfaz del componente es diferente de su propia definición. No desea modificar su propia interfaz, pero debe utilizar las funciones del tercero. interfaz del componente.

7. Modo decorador estructural:

El modo decorador puede agregar dinámicamente algunas responsabilidades adicionales al objeto para expandir la función. Se pueden seleccionar diferentes decoradores en tiempo de ejecución para lograr diferentes comportamientos. ; es más flexible que usar la herencia al organizar y combinar diferentes clases de decoración, se pueden crear muchos comportamientos diferentes y se pueden obtener objetos con funciones más poderosas, cumple con el "principio de apertura y cierre" y la clase decorada; Las clases de decoración son cambios independientes, los usuarios pueden agregar nuevas clases de decoración y clases decoradas según sea necesario, y luego combinarlas cuando las usen, y no es necesario cambiar el código original.

Sin embargo, el patrón decorador también tiene desventajas. Primero, generará muchos objetos pequeños, lo que aumenta la complejidad del sistema. Segundo, es más difícil de depurar para objetos decorados varias veces. puede ser necesario encontrar errores durante la depuración, pero es más complicado comprobarlo paso a paso.

8. Modo proxy estructural:

La motivación del diseño del modo proxy es acceder al objeto real a través del objeto proxy. Al establecer una clase de proxy de objeto, el objeto proxy controla. el objeto original para operar en objetos reales. En el modo proxy, el objeto proxy desempeña principalmente el papel de intermediario, utilizado para coordinar y conectar a la persona que llama (es decir, el cliente) y al destinatario (es decir, el objeto de destino), lo que reduce el acoplamiento del sistema hasta cierto punto y también el objetivo. objeto protegido. Pero la desventaja es que se agrega un objeto proxy entre la persona que llama y la persona que llama, lo que puede ralentizar el procesamiento de las solicitudes.

9. Modo Puente Estructural:

El Modo Puente separa y desacopla la parte abstracta del sistema de la parte de implementación para que puedan cambiar de forma independiente. Para lograr el propósito de permitir que la parte abstracta y la parte de implementación cambien de forma independiente, el modo puente utiliza una relación de combinación en lugar de una relación de herencia. La parte abstracta tiene un objeto de interfaz de la parte de implementación, de modo que las funciones de la parte de implementación. Se puede llamar a una parte de implementación específica a través de este objeto de interfaz. En otras palabras, el puente en el modo puente es una relación unidireccional, y solo la parte abstracta puede usar los objetos de la parte actual, pero no al revés.

El modo puente cumple con el "principio de apertura y cierre" y mejora la escalabilidad del sistema. Puede expandir arbitrariamente una de las dos dimensiones cambiantes sin modificar el sistema original: y los detalles de implementación no son transparentes. a los clientes. Los detalles de implementación se pueden ocultar. Sin embargo, dado que la relación de agregación se establece en la capa de abstracción, los desarrolladores deben programar para la abstracción, lo que aumenta la dificultad de comprender y diseñar el sistema.

10. Modo de apariencia estructural:

El modo de apariencia proporciona una interfaz unificada al cliente para acceder a un grupo de interfaces en el subsistema. El uso del modo de apariencia tiene las siguientes ventajas:

(1) Más fácil de usar: hace que el subsistema sea más fácil de usar. El cliente ya no necesita comprender la implementación interna del subsistema ni comunicarse. con la implementación interna de muchos subsistemas para interactuar con el módulo, solo necesita interactuar con la clase de apariencia;

(2) Acoplamiento flojo: desacople el cliente del subsistema, lo que facilita la expansión y mantener los módulos dentro del subsistema.

(3) Mejor división de los niveles de acceso: mediante el uso razonable de Facade, los niveles de acceso se pueden dividir mejor. Algunos métodos son externos al sistema y algunos métodos se utilizan internamente dentro del sistema. Concentre las funciones que deben exponerse al exterior en la fachada, lo que no solo es conveniente para el uso del cliente, sino que también oculta bien los detalles internos.

11. Modo de combinación estructural:

El modo de combinación combina recursivamente objetos hoja y objetos contenedor para formar una estructura de árbol para representar la estructura jerárquica "parte-todo", de modo que los usuarios tiene un uso consistente de objetos individuales y objetos compuestos, y puede tratar objetos compuestos como objetos hoja sin distinción, lo que permite que los programas de usuario se desacoplen de la estructura interna de elementos complejos.

Lo más importante del patrón de combinación es que los objetos hoja y los objetos combinados implementan la misma clase de construcción abstracta. Puede representar tanto objetos hoja como objetos contenedor. Los clientes solo necesitan programar para esta clase de construcción abstracta. , Es por eso que el modo combinado puede manejar nodos hoja y nodos objeto de manera consistente.

12. Modo de peso mosca estructural:

El modo peso mosca admite eficazmente la reutilización detallada de objetos con pequeños cambios de estado a través de * tecnología de intercambio. Si hay varios objetos idénticos, entonces solo necesita compartir una copia sin crear una instancia de un objeto para cada una, lo que reduce en gran medida la cantidad de objetos en el sistema y ahorra recursos.

El núcleo del modelo flyweight es la clase de fábrica flyweight. La clase de fábrica flyweight mantiene un grupo de almacenamiento de objetos. Cuando el cliente necesita un objeto, primero lo obtiene del grupo flyweight. La instancia del objeto se devuelve directamente. Si no existe en el grupo de peso mosca, se crea una nueva instancia de objeto peso mosca y se devuelve al usuario, y el nuevo objeto se guarda en el grupo de peso mosca. Esto tiene el significado de un singleton.

Las clases de fábrica generalmente usan tipos de colección para guardar objetos, como HashMap, Hashtable, Vector, etc. En Java, los grupos de conexiones de bases de datos, grupos de subprocesos, etc. son aplicaciones que usan el patrón Flyweight.