设计模式之工厂三兄弟(卷二)

0x00 为什么需要工厂模式

使用工厂模式的目的是使得对象的创建和使用分离。一个对象的职责有三种,对象本身所具有的职责,创建对象的职责,使用对象的职责。

0x01 简单工厂模式

是其他两个工厂模式的基础。

  1. 简单工厂定义:根据参数的不同返回不同的具体类的实例,创建的实例通常具有共同的父类。创建实例的方法是静态的,所以也叫静态工厂模式。
  2. 优点:简化创建对象实例的步骤;使用配置文件,在不修改任何客户端代码的情况下更换和增加新具体产品类。
  3. 缺点:系统扩展困难,一旦添加新产品就不得不修改工厂逻辑。如果具体产品类过多,会使得工厂类过于庞大。
  4. 适用场景:工厂类负责的对象不多,不会造成工厂方法中的业务逻辑太过复杂。客户端不关心创建对象的过程。

典型模板

class XXXFactory {  
    //静态工厂方法  
    public static Chart getChart(String type) {  
        XXX x = null; //XXX为父类 
        if (type.equals("x1")) {  
            chart = new XXX1();  
        }  
        else if (type.equals("x2")) {  
            chart = new XXX2();  
        }  
        else if (type.equals("x3")) {  
            chart = new XXX3();  
        }  
        return chart;  
    }  
}

0x10 工厂方法模式

工厂方法模式中包含如下几个角色。

  • Product(抽象产品):它是定义产品的接口,是产品对象的公共父类。
  • ConcreteProduct(具体产品):它实现了抽象产品接口,具体工厂和具体产品之间一一对应
  • Factory(抽象工厂):声明了工厂方法,用于返回一个产品。抽象工厂是工厂方法模式的核心。
  • ConcreteFactory(具体工厂):实现了抽象工厂中定义的工厂方法,由客户端调用,返回具体产品类的实例。

  1. 优点:客户端无需知道具体产品类,只需知道具体工厂类;加入新产品时,无需改动原有代码,只要添加一个具体工厂和具体产品。
  2. 缺点:加入新产品时,需要同时真假工厂和产品两个类,造成相识代码过多。
  3. 适用场景:客户端不知道它所需要的对象的类。抽象工厂类通过其子类来指定创建哪个对象。

0x11 抽象工厂模式

抽象工厂模式为创建一组对象提供了一种解决方案。而工厂方法是创建一种产品

  • 在抽象工厂中声明了多个工厂方法,用于创建不同类型的产品,抽象工厂可以是接口,也可以是抽象类或者具体类。
  • 抽象工厂模式中,增加新的产品族很方便,但是增加新的产品等级结构很麻烦。

(1) 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。
(2) 产品簇:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。

  1. 优点:增加新的产品族很方便。
  2. 缺点:增加新的产品等级结构麻烦。
  3. 适用场景:系统中有多于一个的产品族,而每次只使用其中某一产品族。产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值