什么是工厂模式
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
简单来说,使用了C++多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。
工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。
简单工厂模式
我超级不喜欢写例子。。。
只有在看不懂,不容易理解的情况下,才会去写例子
结构组成:
工厂类:工厂模式的核心类,会定义一个用于创建指定的具体实例对象的接口。
抽象产品类:是具体产品类的继承的父类或实现的接口。
具体产品类:工厂类所创建的对象就是此具体产品实例。
有3个子类1,子类2,子类3,分别有创建对象的方法
在简单工厂类中,根据子类的类型,分别去调用不同的子类的创建对象方法
优点:结构简单,管理方式简单
缺点:扩展性非常差,新增产品的时候,需要去修改工厂类。
工厂方法模式
和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂。
结构组成:
抽象工厂类厂:工厂方法模式的核心类,提供创建具体产品的接口,由具体工厂类实现。
具体工厂类:继承于抽象工厂,实现创建对应具体产品对象的方式。
抽象产品类:它是具体产品继承的父类(基类)。
具体产品类:具体工厂所创建的对象,就是此类。
工厂方法模式的特点:
工厂方法模式抽象出了工厂类,提供创建具体产品的接口,交由子类去实现。
工厂方法模式的应用并不只是为了封装具体产品对象的创建,而是要把具体产品对象的创建放到具体工厂类实现。
工厂方法的缺点:
每新增一个产品,就需要增加一个对应的产品的具体工厂类。相比简单工厂模式而言,工厂方法模式需要更多的类定义。
一条生产线只能一个产品。
抽象工厂模式
上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品,如果需要多种产品,那就需要使用抽象工厂模式。抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。
顾名思义,抽象工厂,这个工厂是抽象的。
结构组成(和工厂方法模式一样):
抽象工厂类厂(ShoesFactory):工厂方法模式的核心类,提供创建具体产品的接口,由具体工厂类实现。
具体工厂类(NiKeProducer):继承于抽象工厂,实现创建对应具体产品对象的方式。
抽象产品类(Shoes\Clothe):它是具体产品继承的父类(基类)。
具体产品类(NiKeShoes\NiKeClothe):具体工厂所创建的对象,就是此类。
优点与不足:
优点: 提供一个接口,可以创建多个产品族中的产品对象,同一类的多个产品对象不需要创建多个工厂。
缺点: 相比简单工厂模式而言,抽象工厂模式需要更多的类定义。
Reference
[1] https://zhuanlan.zhihu.com/p/83535678
[2] https://www.guyuehome.com/37108
网友评论