Ayer presentamos los siete principios de los patrones de diseño y hoy presentamos las tres categorías específicas de patrones de diseño y 23 patrones de diseño específicos.
Visión general
Tres patrones de diseño
Los tres patrones de diseño son: creación, estructura y comportamiento.
- El modo de creación se utiliza principalmente para describir cómo crear objetos (5 tipos)
- El patrón estructural se utiliza principalmente para describir cómo realizar la combinación de clases u objetos (7 tipos)
- Los patrones de comportamiento se utilizan principalmente para describir cómo interactúan las clases u objetos y cómo asignar responsabilidades (11 tipos)
El mapa mental es el siguiente:
Preste atención a la cuenta pública: java Toka Fox, responda [Modo de diseño] para obtener la imagen original en alta definición. Gracias por su atención.
Modo de creación
Modo singleton
Un patrón de diseño en el que los objetos se crean solo una vez en la memoria.
Chino hambriento
public class Singlenton{
// 只实例化一次
private final static Singleton INSTANCE = new Singleton();
// 私有构造方法,防止被实例化
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
Perezoso (doble verificación)
public class Singleton{
// 使用volatile修饰,让变量每次使用的时候从主存主取而不是从各个线程的“工作内存”中
private static volatile Singleton instance;
// 私有构造方法,防止被实例化
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton;
}
}
}
return instance;
}
}
Patrón de clase interna estático
public clsaa Singleton{
// 私有构造方法,防止被实例化
private Singleton(){}
// 使用一个内部类来维护单例,只有在改类被加载的时候,才会实例化对象
private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton();
}
// 获取实例
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
- La versión mejorada del modelo de hombre hambriento resuelve el problema del desperdicio de recursos y también garantiza la seguridad de los subprocesos; el objeto se instancia solo cuando se carga la clase interna; en comparación con el hombre perezoso, el método de clase interna estática evita hacer cola en el bloque de sincronización. juicio nulo, y el rendimiento es mejor que el del modo de hombre perezoso, se recomienda usar
Modo de enumeración
public enum Singleton{
INSTANCE;
public Singleton getInstance(){
return INSTANCE;
}
}
- Seguridad de subprocesos. JVM garantiza la seguridad de subprocesos y una instancia única. En escenarios de reflexión y serialización, aún se puede garantizar una instancia única.
Modo de fábrica
Modo de ingeniería simple
Cree una clase de fábrica unificada, cree diferentes objetos de acuerdo con los parámetros pasados, debe seleccionar uno de los productos en un grupo de productos.
Modo de fábrica
El patrón de fábrica no usa una clase de fábrica unificada para administrar todos los objetos, pero cada objeto tiene una fábrica diferente correspondiente.
Patrón de fábrica abstracto
El patrón de fábrica abstracto es una optimización adicional del patrón de fábrica. La clase de fábrica no solo puede crear un objeto, sino también crear un grupo de objetos.
El patrón de fábrica simple es pasar valores desde el exterior para obtener diferentes objetos.
El patrón de fábrica abstracto obtiene objetos directamente a través de métodos sin pasar valores.
Modo constructor
Separe la construcción de un objeto complejo de su representación, de modo que el mismo proceso de construcción pueda crear diferentes representaciones.
Es decir, solo se pasan los parámetros necesarios durante la construcción, y otros parámetros se pasan opcionalmente a través del método set.
Descripción
- Cree una clase interna estática Builder en la clase y luego copie los parámetros de la clase en la clase Builder.
- Cree un constructor privado en la clase, el parámetro es de tipo Builder
- Cree una función de configuración en el Builder, asigne valores a esos parámetros opcionales en la clase y el valor de retorno es una instancia del tipo Builder.
- Cree un método build () en Builder, cree una instancia de la clase en él y devuélvalo.
Modo de prototipo
Utilice instancias de prototipos para especificar los tipos de objetos que se crearán y cree nuevos objetos copiando estos prototipos. El modo de prototipo es un modo de creación de objetos.
Modelo estructural
Modo adaptador
El propósito es adaptar la interfaz
Adaptación de clases
- Hay una clase existente que se adaptará
public class Adaptee{
public void adapteeRequest(){
System,out,println("被适配者的方法");
}
}
- Definir una interfaz de destino
public interface target{
void request();
}
- A través del adaptador, implemente la clase de herencia de la interfaz y luego llame al método de la clase principal.
Modo decorador
El modo de decoración permite agregar nuevas funciones a un objeto existente sin cambiar su estructura. Este tipo de patrón de diseño pertenece al patrón estructural, que sirve como envoltorio para una clase existente.
Agregue funciones dinámicamente.
Modelo de agencia
En el modelo de proxy, una clase representa la función de otra clase. Este tipo de patrón de diseño pertenece al patrón estructural; en el patrón de agente, creamos objetos con objetos existentes para proporcionar interfaces funcionales al exterior.
Principalmente dividido en proxy estático y proxy dinámico
Modo de apariencia
El modo de apariencia oculta la complejidad del sistema y proporciona una interfaz para que el cliente acceda al sistema. Este tipo de patrón de diseño es un patrón estructural, que agrega una interfaz al sistema existente para ocultar la complejidad del sistema.
Este modelo involucra una sola clase que proporciona métodos simplificados para solicitudes de clientes y llamadas delegadas a métodos de clases de sistema existentes
El modo de apariencia es poner su relación en una clase de Fachada, lo que reduce el grado de acoplamiento entre clases.
Modo Puente
El puente se utiliza para desacoplar la abstracción y la realización de modo que las dos se puedan cambiar de forma independiente. Al proporcionar una estructura de puente antes de la abstracción y la realización, se realiza el desacoplamiento de los dos.
Este modo implica una interfaz como puente, lo que hace que la función tridimensional sea independiente de la clase de implementación de la interfaz. Estos dos tipos de clases se pueden cambiar estructuralmente sin que se afecten entre sí.
Modo de combinación
Se utiliza para tratar un grupo de objetos similares como un solo objeto. El modo de combinación combina objetos de acuerdo con una estructura de árbol, que se utiliza para representar los niveles total y parcial. Este tipo de patrón de diseño es un patrón estructural. Crea una estructura de árbol de combinación de objetos.
Creó una clase que contiene su propio grupo de objetos. Esta clase proporciona una forma de modificar el mismo grupo de objetos.
Modelo de peso mosca
Se utiliza principalmente para reducir la cantidad de objetos creados para reducir el uso de memoria y mejorar el rendimiento. Este tipo de patrón de diseño es un patrón estructural, que proporciona una forma de reducir el número de objetos para mejorar la estructura de objeto requerida por la aplicación.
Intente reutilizar objetos existentes del mismo tipo y, si no se encuentra ningún objeto coincidente, cree uno nuevo.
Modelo de comportamiento
Modo de estrategia y modo de estado
Mismo punto
- Al dividir el comportamiento y el estado en una serie de pequeños componentes, la función se reemplaza por la condición y el estado, que está más en línea con el principio de apertura y cierre, y es fácil de expandir. Además, ambos pueden usarse como una alternativa a if else o branch; el mayor apoyo El comportamiento y el estado son limitados
diferencia
- En el modo de estrategia, la función de la clase es cambiar activamente de acuerdo con las condiciones actuales.
- En el modo de estado, la función de la clase se cambia pasivamente del estado actual
- No hay correlación entre cada comportamiento o algoritmo en el modo de estrategia.
- Existe una asociación entre los estados en el patrón de estado y el estado mismo
Modo intérprete
Proporciona una forma de evaluar la gramática o la expresión del idioma. Este patrón implementa una interfaz de expresión que interpreta un contexto específico. Este modo se utiliza en análisis de SQL, motores de procesamiento de símbolos, etc.
Modo de observador
Cuando existe una relación de uno a muchos entre objetos, se utiliza el modo de observador. Por ejemplo, cuando se modifica un objeto, notificará automáticamente a los objetos dependientes
Modelo intermediario
El patrón intermedio se usa para reducir la complejidad de la comunicación entre múltiples objetos y clases. Este modo proporciona una clase intermediaria, que generalmente maneja la comunicación entre diferentes clases, admite un acoplamiento flexible y hace que el código sea fácil de mantener.
Modo de nota
Guarde un determinado estado de un objeto para restaurarlo en el momento adecuado.
Modo de comando
El modo de comando es un modo de diseño basado en datos. La solicitud se envuelve en el objeto en forma de comando y se pasa al objeto que realiza la llamada. El objeto que realiza la llamada busca un objeto adecuado que pueda manejar el comando y pasa el comando al objeto correspondiente, que ejecuta el comando.
Modelo de cadena de responsabilidad
Se crea una cadena de objetos de destinatario para la solicitud. Este modo da el tipo de solicitud y desacopla el remitente y el receptor de la solicitud.
Modo visitante
Usamos una clase de visitante, que cambia el algoritmo de ejecución de la clase de elemento. De esta manera, el algoritmo de ejecución del elemento se puede cambiar a medida que cambia el visitante. Este tipo de patrón de diseño es un patrón de comportamiento. Según el modo, el objeto de elemento ha recibido el objeto de visitante para que el objeto de visitante pueda manejar operaciones en el objeto de elemento.
Modo iterador
Es un patrón de diseño comúnmente utilizado en entornos de programación java y .net. Este modo genera acceso secuencial a los elementos del objeto de colección sin conocer la representación subyacente del objeto de colección.
Patrón de método de plantilla
Una clase abstracta define públicamente la forma / plantilla para ejecutar sus métodos. Sus subclases se pueden implementar anulando métodos según sea necesario, pero la llamada se realizará de la forma definida en la clase abstracta.
Por fin
- Si siente que ha sido recompensado después de leerlo, espero que me apruebe. Esta será la mayor motivación para actualizar. Gracias por su apoyo.
- Bienvenidos a todos para que presten atención a mi cuenta pública [Java Fox], enfocándome en los conocimientos básicos de Java y la computadora, prometo dejarles obtener algo después de leerlo, si no me creen, péguenme
- Si tiene diferentes opiniones o sugerencias después de leer, por favor comente y comparta con nosotros. Gracias por su apoyo y cariño.
——Soy Chuhu, y amo la programación tanto como a ti.