Patrón de fábrica simple, patrón de fábrica, patrón de fábrica abstracto

La fábrica, como su nombre indica, es para crear productos. Según si el producto es un producto específico o una fábrica específica, se puede dividir en modo de fábrica simple y modo de método de fábrica, y según el grado de abstracción de la fábrica, se puede dividir en modo de método de fábrica y modo de fábrica abstracto. Este modo se utiliza para encapsular y gestionar la creación de objetos y es un modo de creación.
Tabla de contenido

Patrón
de fábrica simple Primero hablemos del patrón de fábrica simple . El método de fábrica simple contiene una lógica de negocios que selecciona la clase inicial de la jerarquía de clases. La
clase de cliente no crea directamente la clase de producto. La clase de cliente es solo el consumidor del objeto. El patrón de fábrica simple se da cuenta de la separación de responsabilidades. La clase cliente no es responsable de crear objetos de la clase.
Diagrama UML:
Inserte la descripción de la imagen aquí
Dé un ejemplo para comprender mejor estos tres modos, el ejemplo de venta de leche.
Tipos de leche: Leche Mengniu y Leche Yili.

public interface Mike {
    
    
    public String make();
}
public class MengNiuMilk implements Mike{
    
    
    @Override
    public String make() {
    
    
        return "制作蒙牛牛奶";
    }
}
public class YiLiMilk implements Mike {
    
    
    @Override
    public String make() {
    
    
        return "制作伊利牛奶";
    }
}

public class MikeFactory {
    
    
    public Mike getMike(String mikeName){
    
    
        if("蒙牛牛奶".equals(mikeName)){
    
    
            return new MengNiuMilk();
        }
        if("伊利牛奶".equals(mikeName)){
    
    
            return new YiLiMilk();
        }
        return null;
    }
}
//测试
public class Test {
    
    
    public static void main(String[] args) {
    
    
        MikeFactory mikeFactory = new MikeFactory();
        String name = mikeFactory.getMike("蒙牛牛奶").make();
        System.out.println(name);
        System.out.println(mikeFactory.getMike("伊利牛奶").make());
    }
}

Salida:

制作蒙牛牛奶
制作伊利牛奶

Patrón de fábrica
En la clase de fábrica del patrón de fábrica simple, debe saber cómo crear objetos de cada subclase, por lo que siempre que se agrega una clase de producto, o el código de la clase de fábrica necesita ser modificado, no se ajusta al principio de apertura y cierre. La razón por la que este patrón no se ajusta al principio de apertura y cierre es que el método de fábrica es solo una clase de entidad.Cada vez que se agrega un nuevo producto, la declaración condicional debe modificarse en la clase de fábrica. Por lo tanto, se introduce el modelo de fábrica, se usa una interfaz como superclase y la jerarquía de clases de la misma clase de producto produce una estructura de clases de creador, y cada uno es responsable de crear el producto correspondiente.
Diagrama UML:
Inserte la descripción de la imagen aquí
este ejemplo es el mismo que el anterior, pero es necesario agregar la interfaz AbstractFactory, y diferentes fábricas de productos implementan esta interfaz.
Tipos de fábricas: fábrica de Yili, fábrica de Mengniu.

public interface AbstractFactory {
    
    
    public Mike mikeMake();
}
public class YiLiFactory implements AbstractFactory {
    
    
    @Override
    public Mike mikeMake() {
    
    
        return new YiLiMilk();
    }
}
public class MengNiuFactory implements AbstractFactory {
    
    
    @Override
    public Mike mikeMake() {
    
    
        return new MengNiuMilk();
    }
}
//测试
public class Test {
    
    
    public static void main(String[] args) {
    
    
        YiLiFactory yiLiFactory = new YiLiFactory();
        System.out.println(yiLiFactory.mikeMake().make());
        MengNiuFactory mengNiuFactory = new MengNiuFactory();
        System.out.println(mengNiuFactory.mikeMake().make());
    }
}

Salida:

制作伊利牛奶
制作蒙牛牛奶

Modelo abstracto de fábrica Independientemente de
cómo se divida y extraiga la fábrica, los dos modelos anteriores son solo para un tipo de producto lecheMilkSi desea producir otro producto leche en polvoPowderedMilk, ¿cómo se debe expresar?
La forma más sencilla es hacer una copia completa del modelo del método de fábrica presentado en 2, pero esta vez se produce leche en polvo. En otras palabras, tenemos que copiar y modificar completamentetodos los códigos de gestión de la producción de leche , lo que no favorece la expansión y el mantenimiento.
El modelo de fábrica abstractoAbstarctFactoryagrega una interfaz para crear productos en él, y realiza la creación de nuevos productos en subfábricas de concreto.
Diagrama UML:
Inserte la descripción de la imagen aquí
Antes de enfrentar el mismo tipo de producto, ahora agregue otro tipo de producto: leche en polvo.
Nuevos tipos de leche en polvo: leche en polvo Yili, leche en polvo de Mongolia.

public interface PowderedMilk {
    
    
    public String make();
}
public class MengNiuPowderedMilk implements PowderedMilk {
    
    
    @Override
    public String make() {
    
    
        return "蒙牛奶粉";
    }
}
public class YiLiPowderedMilk implements PowderedMilk {
    
    
    @Override
    public String make() {
    
    
        return "伊利奶粉";
    }
}
public class MengNiuFactory implements AbstractFactory {
    
    
    @Override
    public Mike mikeMake() {
    
    
        return new MengNiuMilk();
    }

    @Override
    public PowderedMilk powderedMilkMake() {
    
    
        return new MengNiuPowderedMilk();
    }
}
public class YiLiFactory implements AbstractFactory {
    
    
    @Override
    public Mike mikeMake() {
    
    
        return new YiLiMilk();
    }

    @Override
    public PowderedMilk powderedMilkMake() {
    
    
        return new YiLiPowderedMilk();
    }
}
//测试
public class Test {
    
    
    public static void main(String[] args) {
    
    
        YiLiFactory yiLiFactory = new YiLiFactory();
        System.out.println(yiLiFactory.mikeMake().make());
        System.out.println(yiLiFactory.powderedMilkMake().make());
        MengNiuFactory mengNiuFactory = new MengNiuFactory();
        System.out.println(mengNiuFactory.mikeMake().make());
        System.out.println(mengNiuFactory.powderedMilkMake().make());
    }
}

Salida:

制作伊利牛奶
伊利奶粉
制作蒙牛牛奶
蒙牛奶粉

Supongo que te gusta

Origin blog.csdn.net/weixin_43213064/article/details/112239091
Recomendado
Clasificación