工厂模式
工厂模式是创建型模式模式,解决new对象时的一些列问题,如:依赖,耦合,后期维护等
1. 简单工厂模式
如:有一个披萨店类,制作披萨流程如下的,,,代码里直接new出了披萨,然后做些操作,如下:
我们把new这段代码封装起来,移动到单独的一个类里(SimplePizzaFactory),我们新增的类就是工厂,如下;
最终的代码如下;
总结:
新增的SimplePizzaFactory就是简单工厂模式(一般没有子类,没有再继承关系),我们看看定义,如下:
2. 工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
问题:披萨店的列子中,如果有两个分店,一个在美国,一个在英语,,那他们需要生产本地化的披萨,这时要引入工厂方法模式了,类图如下:
说明:pizzaStore超类(工厂类),有两个子类,分别两个子类来决定到底实例化那些产品。
3. 抽象工厂模式
定义:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。可以理解成是多个工厂方法的组合。
解决问题:在工厂方法模式中,我们的具体创建者每次使用都只能创建一个同类型的对象,假如我们现在需要的是多个不同类型的对象,工厂方法就满足不了需求了。这时我们可以把多个工厂方法组合到一个类,这就是抽象工厂模式,它就是专门用来创建多个产品,也可以说是创建产品家族的。类图如下:
需求:为了保证质量,我们需要把原料统一共同时,就适合抽象工厂来解决。类图如下:
抽象工厂模式的优点
(1)、允许客户使用抽象的接口创建一组相关产品,而不需要知道(或者关心)产出的具体产品是什么,这样客户就可以从具体的产品中解耦出来。
(2)、一个具体工厂可以创建多个产品,与工厂方法模式相比,可以少产生具体工厂的类数量。
(3)、易于交换产品系列,只要更换具体工厂,就可以改变这个产品系列。
抽象工厂模式的和缺点
(1)、抽象工厂是使用组合的方式把工厂方法集合到一个类中,当新增一个产品家族成员时就要修改抽象工厂类及其下面的具体工厂类,所以它的扩展性比较差。
(2)、每新增一个产品子类都要创建一个类,当产品子类过多时会产生很多类,导致系统复杂性加大。
抽象工厂模式的使用场合
1、当需要创建产品家族,或者需要想让创建的产品集合起来时使用。
2、当系列产品不固定,在以后可能会增加整个系列产品时使用。
设计原则:
1. 对扩展开放,对修改关闭。
2. 依赖抽象,不要依赖具体类。
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/197402.html