首页 > 其他 > 详细

工厂方法模式

时间:2021-01-22 17:10:07      阅读:25      评论:0      收藏:0      [点我收藏+]

一、工厂模式诞生的原因

简单工厂模式由于不易扩展,违背闭包原则,为了解决这个问题,就产生了工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要加入新的功能,只需要加入工厂实现类就可以了。

 二、什么是工厂方法模式

工厂方法模式也叫做虚拟构造器模式或者多态工厂模式,工厂父类定义所有产品对象的公共接口,通过工厂子类来负责产生具体哪个产品对象,将产品实例化操作延迟到工厂子类中完成。

抽象产品角色(Product):定义产品的接口
具体产品角色(ConcreteProduct) :具体产品类
抽象工厂角色(Creator) :声明工厂方法(FactoryMethod),返回一个产品
真实的工厂(ConcreteCreator):实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例(客户调用的是这个!)

 技术分享图片

 三、工厂方法模式的适用场景

1.不知道所需要的类

客户端不知道具体产品的类名,只需要知道所对应的工厂就可以了,客户端需要知道创建具体产品的工厂类,通过工厂类来创建具体的对象。

2.一个类通过其子类来指定创建那个对象

四、工厂方法模式的优缺点

优点:

1.客户调用工厂子类来创建具体的产品,客户无需关心产品对象的具体创建细节,只需要关心对应的工厂即可。

2.工厂角色和产品角色的多态性设计,使得父工厂可以自主决定创建那个产品对象,具体的创建过程是在工厂子类中完成。

3.当需要加入新产品时无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改具体的工厂和具体的产品,只需要添加一个具体工厂和具体产品就可以了。

系统的可扩展性变得非常好,完全符合开闭原则。

 

缺点:

1.在添加新的产品的时候,需要加入成对的具体产品类和具体工厂类,提升了系统的复杂性,更多的类需要编译运行,给系统带来了额外的开销。

2.由于考虑了系统的可扩展性,引入了抽象层,增加了系统的抽象性和理解难度,实现时可能还需要dom,和反射等技术,增加了系统的实现难度。

五、工厂方法模式实现

也就是改写之前简单工厂模式的代码即可。

1.创建一个工厂父接口

public interface IApplePhoneFactory {
    void getSize();
}

  

2. 创建三个工厂子类

public class IphoneXFactory implements IApplePhoneFactory{
    @Override
    public void getSize() {
        IphoneX iphoneX = new IphoneX();
        iphoneX.getSize();
    }
}

  

3.测试

调用具体的子工厂实例返回即可。

 

 

六、总结

工厂方法模式又称为工厂模式,它属于类创建型模式

工厂方法模式包含四个角色

工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性

其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性

 

工厂方法模式

原文:https://www.cnblogs.com/yaoyaoo/p/14313258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!