Patrón de fábrica abstracto del patrón de diseño de java (Patrón de fábrica abstracto)

concepto

Abstract Factory Pattern: proporciona una interfaz para crear una serie de objetos relacionados o interdependientes sin especificar sus clases específicas. El patrón de fábrica abstracto, también conocido como patrón Kit, pertenece al patrón de creación de objetos.

El patrón Abstract Factory proporciona una forma de encapsular fábricas individuales de la misma familia de productos. En uso normal, un programa cliente necesita crear una implementación concreta de la fábrica abstracta y luego usar la fábrica abstracta como una interfaz para crear objetos concretos de este tema. El programa cliente no necesita saber (o cuidar) el tipo concreto de objetos que obtiene de estos métodos internos de fábrica, porque el programa cliente solo usa la interfaz común de estos objetos. El patrón Abstract Factory separa los detalles de implementación de un conjunto de objetos de su uso general.

familia de productos

Entendamos qué es una familia de productos: una familia de productos funcionalmente relacionados ubicados en diferentes estructuras de jerarquía de productos. Como en el ejemplo a continuación, hay dos familias de productos: una familia de autos deportivos y una familia de autos comerciales.

[ QQ20160419-0][5]

usar

El patrón de fábrica abstracto, como el patrón de método de fábrica, se ajusta al principio abierto-cerrado. Pero la diferencia es que cuando el patrón del método de fábrica agrega un producto específico, se debe agregar la fábrica correspondiente. Pero el patrón de fábrica abstracto solo necesita agregar una nueva fábrica al agregar un tipo específico de producto. En otras palabras, una fábrica en el patrón de método de fábrica solo puede crear un producto específico. Una fábrica en el patrón de fábrica abstracto puede crear múltiples productos concretos pertenecientes a un tipo. El número de productos creados por la fábrica está entre el patrón de fábrica simple y el patrón de método de fábrica.

El patrón de fábrica abstracto se puede utilizar cuando:

Es importante para todos los tipos de patrones de fábrica que un sistema no dependa de los detalles de cómo se crean, componen y representan las instancias de clase de producto.

Hay más de una familia de productos en el sistema, y ​​solo se utiliza una de ellas a la vez.

Los productos que pertenecen a la misma familia de productos se utilizarán juntos y esta restricción debe reflejarse en el diseño del sistema.

El sistema proporciona una biblioteca de clases de productos, y todos los productos aparecen con la misma interfaz, para que el cliente no dependa de la implementación específica.

Método para realizar

El patrón de fábrica abstracto incluye los siguientes roles:

AbstractFactory (factoría abstracta): se utiliza para declarar el método de generación de productos abstractos

ConcreteFactory (fábrica de hormigón): implementa el método de generación de productos abstractos declarados por la fábrica abstracta, y genera un conjunto de productos específicos.Estos productos forman una familia de productos, y cada producto se ubica en una estructura de jerarquía de productos;

AbstractProduct (producto abstracto): declara una interfaz para cada producto y define el método comercial abstracto del producto en el producto abstracto;

Producto (producto concreto): defina el objeto de producto específico producido por la fábrica específica y realice el método comercial definido en la interfaz abstracta del producto.

El ejemplo de este artículo utiliza un ejemplo de una fundición de automóviles que fabrica un automóvil. Supongamos que somos un fabricante OEM de automóviles y somos responsables de fabricar automóviles para dos empresas, Mercedes-Benz y Tesla. Simplemente entendemos a Mercedes-Benz como un coche al que hay que repostar y a Tesla como un coche al que hay que cargar. Entre ellos, Mercedes-Benz incluye autos deportivos y vehículos comerciales, y Tesla también incluye autos deportivos y vehículos comerciales.

[ QQ20160419-1][6]

En los escenarios anteriores, podemos tratar los autos deportivos y los vehículos comerciales por separado. Hay una fábrica separada para autos deportivos y una fábrica separada para vehículos comerciales. De esta manera, no importa si ayudamos a cualquier otro fabricante a fabricar automóviles en el futuro, siempre que sean automóviles deportivos o vehículos comerciales, no necesitamos introducir fábricas. Asimismo, si tuviéramos que añadir otro tipo de vehículo, como un SUV, no necesitaríamos modificar nada de un deportivo o un vehículo comercial.

Aquí están los productos abstractos, Mercedes y Tesla:

public interface BenzCar {

    //加汽油
    public void gasUp();

}

public interface TeslaCar {

    //充电
    public void charge();
}

Los siguientes son los productos específicos, automóvil deportivo Mercedes-Benz, vehículo comercial Mercedes-Benz, automóvil deportivo Tesla, vehículo comercial Tesla:

public class BenzSportCar implements BenzCar {
    public void gasUp() {
        System.out.println("给我的奔驰跑车加最好的汽油");
    }
}

public class BenzBusinessCar implements BenzCar{
    public void gasUp() {
        System.out.println("给我的奔驰商务车加一般的汽油");
    }
}

public class TeslaSportCar implements TeslaCar {
    public void charge() {
        System.out.println("给我特斯拉跑车冲满电");
    }
}

public class TeslaBusinessCar implements TeslaCar {
    public void charge() {
        System.out.println("不用给我特斯拉商务车冲满电");
    }
}

La siguiente es una fábrica abstracta:

public interface CarFactory {

    public BenzCar getBenzCar();
    public TeslaCar getTeslaCar();
}

La siguiente es la fábrica específica:

public class SportCarFactory implements CarFactory {
    public BenzCar getBenzCar() {
        return new BenzSportCar();
    }

    public TeslaCar getTeslaCar() {
        return new TeslaSportCar();
    }
}

public class BusinessCarFactory implements CarFactory {
    public BenzCar getBenzCar() {
        return new BenzBusinessCar();
    }

    public TeslaCar getTeslaCar() {
        return new TeslaBusinessCar();
    }
}

La inclinación del "principio abierto-cerrado"

El "principio abierto-cerrado" requiere que el sistema esté abierto a la extensión y cerrado a la modificación, y el propósito de mejorar su función se puede lograr a través de la extensión. Para los sistemas que involucran múltiples familias de productos y múltiples estructuras jerárquicas de productos, la mejora funcional incluye dos aspectos:

Agregar una familia de productos: para agregar una nueva familia de productos, el patrón de método de fábrica es compatible con el "principio de abrir y cerrar". Para una familia de productos recién agregada, solo es necesario agregar una nueva fábrica específica correspondiente, y no es necesario hacer cualquier cosa por el código existente, cualquier modificación.

Agregar una nueva estructura de nivel de producto: para agregar una nueva estructura de nivel de producto, todos los roles de fábrica deben modificarse, incluidas las clases de fábrica abstractas. En todas las clases de fábrica, se deben agregar métodos para producir nuevos productos, que no pueden admitir "apertura y cierre en principio".

Esta naturaleza del patrón de fábrica abstracta se llama la inclinación del "principio de apertura y cierre". El patrón de fábrica abstracta apoya la adición de nuevos productos de manera inclinada. Brinda conveniencia para la adición de nuevas familias de productos, pero no puede proporcionar Nuevos niveles de producto La adición de estructura proporciona tal comodidad.

La relación entre los tres modelos de fábrica

Cuando cada clase de fábrica específica en el patrón de fábrica abstracto solo crea un objeto de producto, es decir, cuando solo hay una estructura de jerarquía de productos, el patrón de fábrica abstracto degenera en un patrón de método de fábrica;

La mayor diferencia entre el patrón de fábrica abstracto y el patrón de método de fábrica es que el patrón de método de fábrica está dirigido a una estructura de jerarquía de productos, mientras que el patrón de fábrica abstracto necesita enfrentar múltiples estructuras de jerarquía de productos.

Cuando la fábrica abstracta en el patrón del método de fábrica se fusiona con la fábrica concreta, se proporciona una fábrica unificada para crear objetos de productos, y el método de fábrica para crear objetos está diseñado como un método estático, el patrón del método de fábrica degenera en un patrón de fábrica simple .

Resumir

El patrón de fábrica abstracto proporciona una interfaz para crear una serie de objetos relacionados o interdependientes sin especificar sus clases concretas. El patrón de fábrica abstracto, también conocido como patrón Kit, pertenece al patrón de creación de objetos.

El patrón de fábrica abstracto es la forma más abstracta y general de todos los patrones de fábrica.

La principal ventaja del patrón de fábrica abstracto es que aísla la generación de clases específicas, por lo que los clientes no necesitan saber qué se crea, y cada vez que se pueden crear varios objetos en una familia de productos a través de la clase de fábrica específica, es Es más conveniente agregar o reemplazar familias de productos, es muy conveniente agregar nuevas fábricas específicas y familias de productos, la principal desventaja es que es muy complicado agregar una nueva estructura de nivel de producto, y es necesario modificar la fábrica abstracta y todo clases de fábrica específicas, y se inclina el apoyo al "principio de apertura y cierre".

Supongo que te gusta

Origin blog.csdn.net/zy_dreamer/article/details/132364238
Recomendado
Clasificación