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");
    }
}

执行结果

采购制作特仑苏的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
--------------
采购制作蒙牛的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
--------------
采购制作伊利的原材料
获取对应原材料
加工原材料
牛奶生产完成
包装成品牛奶
相关文章
|
6月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
设计模式 Java
重学设计模式-工厂模式
  今天来说一下工厂模式(简单工厂,工厂方法,抽象工厂),工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
67 0
|
6月前
|
设计模式 Java
小谈设计模式(10)—原型模式
小谈设计模式(10)—原型模式
|
6月前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
设计模式 Java
Java设计模式解析:工厂模式的奥秘
当谈论Java设计模式时,"工厂模式"无疑是一个不容忽视的重要主题。在本文中,我们将深入探讨工厂模式,探索它的概念、应用场景以及在Java中的具体实现。
73 0
|
6月前
|
设计模式 Java Spring
|
设计模式 uml
23种设计模式漫画版系列—生成器模式(一)
23种设计模式漫画版系列—生成器模式
109 0
|
设计模式 Java 领域建模
23种设计模式漫画版系列—生成器模式(二)
23种设计模式漫画版系列—生成器模式(二)
83 0
|
设计模式 存储 Java
【Java设计模式 设计模式与范式】创建型模式 六:原型模式
【Java设计模式 设计模式与范式】创建型模式 六:原型模式
55 0
|
设计模式 消息中间件 缓存
Java设计模式学习1:创建型与结构型
首先要明白设计模式到底是什么,设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途和具体情况我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。
Java设计模式学习1:创建型与结构型