GOF之工厂模式(创建型模式) ✨ 每日积累

简介: GOF之工厂模式(创建型模式) ✨ 每日积累

工厂模式是什么


工厂设计模式事常见的设计模式,属于创建型模式。在工厂中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。一般在创建复杂对象的地方可以选择使用工厂模式,简单对象的话可以使用new去创建。工厂除了将创建和使用对象分离,还有一个作用就是可以屏蔽一些创建对象后初始化的事情,如果直接反射具体的产品对象,那么反射对象后,需要每次都做初始化的工作,而放在工厂中,就不需要每次都初始化了


工厂模式优缺点

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。


缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。


工厂模式示例代码

关系图式

1.png

抽象产品:它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。


具体产品:它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应。


抽象工厂: 定义一个工厂方法用来返回一个产品,抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。


具体工厂:实现了抽象工厂制造对象的方法,由调用着决定需要制作的对象,返回一个具体的实例对象。

抽象产品Milk

public abstract class Milk {
    public abstract void prepareRawMaterials();
    void obtainRawMaterials() {
        System.out.println("获取对应原材料");
    }
    void machiningObtainRawMaterials(){
        System.out.println("加工原材料");
    }
    void productionCompleted(){
        System.out.println("牛奶生产完成");
    }
    void doPackage(){
        System.out.println("包装成品牛奶");
    }
}

具体产品MilkMengNiu

public class MilkMengNiu extends Milk{
    @Override
    public void prepareRawMaterials() {
        System.out.println("采购制作蒙牛的原材料");
    }
}

具体产品MilkTeLunSu

public class MilkTeLunSu extends Milk {
    @Override
    public void prepareRawMaterials() {
        System.out.println("采购制作特仑苏的原材料");
    }
}

具体产品MilkYiLi

public class MilkYiLi extends Milk {
    @Override
    public void prepareRawMaterials() {
        System.out.println("采购制作伊利的原材料");
    }
}

具体工厂

public class MilkFactory implements Factory{
    public Milk getMilk(String milkType){
        Milk milk = null;
        if(milkType == null){
            return null;
        }
        if(milkType.equalsIgnoreCase("TeLunSu")){
            milk = new MilkTeLunSu();
        } else if(milkType.equalsIgnoreCase("MengNiu")){
            milk = new MilkMengNiu();
        } else if(milkType.equalsIgnoreCase("YiLi")){
            milk = new MilkYiLi();
        }
        milk.prepareRawMaterials();
        milk.obtainRawMaterials();
        milk.machiningObtainRawMaterials();
        milk.productionCompleted();
        milk.doPackage();
        return milk;
    }
}

抽象工厂

public interface Factory {
    Milk getMilk(String milkType);
}
class TestMilkFactory{
    public static void main(String[] args) {
        Factory factory =  new MilkFactory();
        factory.getMilk("TeLunSu");
        System.out.println("--------------");
        factory.getMilk("MengNiu");
        System.out.println("--------------");
        factory.getMilk("YiLi");
    }
}

执行结果

采购制作特仑苏的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
--------------
采购制作蒙牛的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
--------------
采购制作伊利的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
相关文章
|
8天前
|
设计模式 存储 Java
设计模式:循序渐进走入工厂模式
设计模式:循序渐进走入工厂模式
|
8天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
9月前
|
设计模式 Java
Java设计模式解析:工厂模式的奥秘
当谈论Java设计模式时,"工厂模式"无疑是一个不容忽视的重要主题。在本文中,我们将深入探讨工厂模式,探索它的概念、应用场景以及在Java中的具体实现。
41 0
|
8天前
|
设计模式 Java Spring
GOF之抽象工厂模式(创建型模式) ✨ 每日积累
GOF之抽象工厂模式(创建型模式) ✨ 每日积累
GOF之抽象工厂模式(创建型模式) ✨ 每日积累
|
存储 Java
GOF之单例模式(创建型模式) ✨每日积累
GOF之单例模式(创建型模式) ✨每日积累
GOF之单例模式(创建型模式) ✨每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累
GOF之装饰器模式(结构型模式) ✨ 每日积累
GOF之适配器模式(结构型模式) ✨ 每日积累
GOF之适配器模式(结构型模式) ✨ 每日积累
GOF之适配器模式(结构型模式) ✨ 每日积累
|
开发者
GOF之桥接模式(结构型模式) ✨ 每日积累
GOF之桥接模式(结构型模式) ✨ 每日积累
GOF之桥接模式(结构型模式) ✨ 每日积累
|
设计模式 存储 安全
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累
GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累