工厂方法模式——简单到抽象
简单工厂模式:
说到简单工厂模式首先要明确一点,简单工厂模式是设计模式吗?之前师傅问我的时候,我不假思索就说是,后来想想,简单工厂模式不应该是设计模式,为什么呢,因为简单工厂模式违背了一个原则:开放——封闭原则,所以简单工厂模式不是设计模式,或者说是不完整的设计模式。那么既然他不是设计模式,在设计模式这本书中为什么还要有简单工厂模式呢?主要是用简单工厂模式来引入了一个工厂概念,由浅入深来说明设计模式。以及后面用简单工厂模式来改进抽象工厂模式
UML类图
工厂模式
工厂模式的定义是一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延伸到其子类。
UML类图
我们从工厂方法模式的UML类图中可以发现,相比较简单工厂模式,它更加的复杂,而且工作量相比较还更多了,但是我们之前说了简单工厂模式它并不是真正的设计模式,它违背了设计模式中的开放——封闭原则,因为我们每次添加新的算法或者是对于需求有了新的要求,我们都要去改动简单工厂,为了解决这一问题,我们分别在工厂方法模式下面增加了与算法相对应的具体工厂,这样我们有了新的需求的时候就只需要去增加或者是改动具体对应的方法模式,而不影响其他功能。工厂方法模实现时,客户端需要决定具体实例化哪一个工厂来实现运算类,选择判断的问题还是存在,也就是说,工厂方法模式把简单工厂的内部逻辑判断移到了客户端代码进行,你想要加功能,本来是该工厂类,现在是改客户端。
抽象工厂模式
抽象工厂模式是提供一个创建一系列相关或依赖对象的接口,而不需指定他们具体的类。
UML类图
抽象工厂模式除了有工厂方法模式的优点以外,最主要的优点就是可以在类的内部对于产品进行约束,他还具有封装性,每个产品的实现类不是高层模块要关心的,要关心的是什么?是接口,是抽象,他不关心对象是如何创建的,这有谁负责呢?工厂类,只有知道工厂类是谁,我就能创建一个需要的对象,省时省力,这就是优秀的设计模式。
当然了设计模式还一些缺点比如说他的扩展非常麻烦,增加一个要改动好几个类,这样是非常难看的做法, 所以在后面提到了用简单工厂去改进抽象工厂,就是把其中的多个类工厂直接用一个简单工厂来替代。这样就减少了代码的改动。