工厂方法模式(Factory Method)

工厂方法模式

一、模式动机

image
与简单工厂模式相比新加了抽象工厂接口

二、模式定义

  • 工厂方法模式(Factory Method Pattern)简称工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。
  • 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

三、模式结构

image

四、案例实现

案例背景

电视机工厂

案例结构

image

代码实现

TV

public interface TV {

    void play();

}

具体产品

public class YuTV implements TV{
    @Override
    public void play() {
        System.out.println("sanjin");
    }
}
public class TCLTV implements TV{
    @Override
    public void play() {
        System.out.println("TCL");
    }
}

factory

public interface Factory {

    TV create();

}

具体工厂

public class TCLFactory implements Factory{
    @Override
    public TV create() {
        return new TCLTV();
    }
}
public class YuFactory implements Factory{
    @Override
    public TV create() {
        return new YuTV();
    }
}

五、模式分析

  • 工厂方法模式是简单工厂模式的迚一步抽象和推广
  • 工厂方法模式保持了简单工厂模式的优点,并克服了它的缺点
  • 核心的工厂类丌再负责所有产品的创建,而是将具体创建工作交给其子类去完成
  • 可以允许系统在丌修改工厂角色的情况下引进新产品
  • 增加具体产品-->增加具体工厂,符合“开闭原则

六、总结

模式优点

  • 工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
  • 能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
  • 在系统中加入新产品时,完全符合开闭原则

模式缺点

  • 系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
  • 增加了系统的抽象性和理解难度

使用情形

  • 客户端丌知道它所需要的对象的类(客户端丌需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体产品对象由具体工厂类创建)
  • 抽象工厂类通过其子类来指定创建哪个对象
posted @ 2023-05-04 15:19  yuxin!!  阅读(39)  评论(0)    收藏  举报