Modo singleton
La motivación a veces es importante tener solo una instancia de la clase. Por ejemplo, un sistema debe tener solo una instancia de administración de ventanas.
Singleton Pattern es el patrón de diseño más simple: la clase es responsable de instancias de sí misma, asegurando que solo haya una instancia y proporcione una entrada para acceder a esta instancia.
Objetivo
1. Asegúrese de que solo se cree una instancia.
2. Proporcione una entrada para acceder a esta instancia.
Use final para asegurarse de que se cree una vez, y el constructor privado asegura que no esté instanciado. El método de público de getInstance asegura que el acceso externo sea posible. El siguiente es el modo hambriento:
Class public Singleton {Instancia de Singleton final Singleton de privado static = new Singleton (); private singleton () {} public static singleton getInstance () {instancia de retorno; }}
Modo perezoso:
clase pública Singletondemo {private static volátiles singletondemo instancia = null; private singletondemo () {} public static singletondemo getInstance () {if (instance == null) {sincronizado (singletondemo .class) {if (instance == null) {instancia = nuevo singletondemo (); }} instancia de retorno; }}
Escenarios y ejemplos aplicables
1. La clase del registrador evita la creación de una instancia de registrador cada vez que se imprime el registro.
2. Clase de control, generalmente solo hay una instancia de control en todo el sistema.
Problemas e implementaciones específicas
1. El modo singleton seguro y seguro de hilo debe ser seguro de hilo.
2. El modo perezoso utiliza un mecanismo de doble bloqueo.
3. El modo Eagle usa variables estáticas y se instancia cuando se carga el programa, asegurando que solo haya una instancia.
4. Los métodos abstractos de fábrica y fábrica generalmente se diseñan como patrones singleton para garantizar que solo haya una fábrica.
5. Al usar serialización y deserialización, se crearán múltiples instancias. Use la función ReadResolve para evitar esto, pero es mejor no usar la serialización.
La clase pública Singleton implementa serializable {... // Este método se llama inmediatamente después de que se deserialice un objeto de esta clase. // Este método devuelve la instancia de Singleton. objeto protegido readResolve () {return getInStance (); }}
Puntos clave
1. En los programas de múltiples subprocesos, preste atención a la sincronización de datos.
2. Al serializar, use el método ReadResolve para devolver la instancia para evitar que se creen múltiples objetos.
3. Si se cargan por múltiples cargadores de clase, se crearán múltiples instancias.
Modo de fábrica simple
El simple modelo de motivación de fábrica es la base y la implementación preliminar de los métodos de fábrica y de fábrica abstractas.
Objetivo
1. No revele los detalles de la instanciación de objetos al cliente.
2. Cree un objeto a través de una interfaz común.
lograr
La implementación es muy simple:
1. Cuando un cliente necesita producto, no usa nuevo para crearlo, pero proporciona una descripción del producto a la fábrica, lo que permite que la fábrica proporcione un nuevo producto.
2. Factory instancias de un producto al cliente.
3. El cliente utiliza productos abstractos, sin preocuparse por la implementación concreta del producto.
Ejemplo
1. Programa de dibujo para formas de dibujo. La forma es la interfaz del producto, y los triángulos son el producto de concreto. Podemos crear una fábrica y luego crear el producto de acuerdo con la descripción del cliente. Sin embargo, al agregar nuevas formas, necesitamos modificar la clase de fábrica.
Problemas e implementaciones específicas
1. Al agregar nuevos productos, la fábrica debe modificarse.
Public Class ProductFactory {public Product CreateProduct (String ProductId) {if (id == ID1) return New OneProduct (); if (id == id2) devuelve nuevo otro proproduct (); ... // Entonces, para las otras ID de regreso nulo; // Si la ID no tiene ninguno de los valores esperados} ...}En general, utilizamos la declaración IF para juzgar la descripción del producto e instanciar diferentes productos. Cuando hay nuevos productos, necesitamos agregar nuevos juicios. Este problema puede resolverse mediante patrones de fábrica abstracta.
Resumir
1. Úselo solo cuando realmente necesite modo de fábrica, de lo contrario solo aumentará la complejidad del programa. Por ejemplo, cuando varios objetos tienen tipos básicos similares, puede considerar usar el modo de fábrica simple para crear objetos de manera uniforme.
2. Las fábricas simples tienen más declaraciones de rama de juicio, que violan el principio de apertura y cierre de modificaciones. Por lo tanto, es aconsejable usar el modo de fábrica simple para algunos programas fijos y simples, y utilizar el modo de fábrica abstracto o el modo de método de fábrica para algunos programas complejos y con frecuencia expandidos.