1. 简单工厂模式(SimpleFactory Mode)
简单工厂模式的思路是,首先我们把一些共性的东西(算法)拿出来,进行抽象,比如加减乘除。然后我们在定义一个类作为工厂类,工厂类的作用就是根据传过来的字符串或者其他Key值给返回一个相对应的算法的实体。
- 原理 : 一个具体工厂通过条件语句创建多个产品,产品的创建逻辑集中于一个工厂类,客户端通过传不同的参数给工厂,实现创建不同产品的目的
- 优点 : 客户端不知道产品的实现细节,降低耦合
- 缺点 : 增加新产品时需要修改工厂类,不同的产品都在同一个工厂生产,并没有完全解耦
2. 工厂方法模式(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
- 原理 : 一个工厂创建一个产品,所有的具体工厂继承自一个抽象工厂。客户端先创建不同产品的工厂,再由工厂创建具体产品,产品的创建逻辑分散在每个具体工厂类中。
- 优点 : 增加新产品时不需要去修改抽象工厂了,符合OCP原则(开闭原则)
- 缺点 : 子类工厂会很多,不利于维护
3. 抽象工厂模式(Abstract Factory)
首先是满足OCP的,而且可以满足产品切换,能实现的前提是比如A和B两个产品,它们有1和2两个方法接口(类),现在我们在增加新的产品C(假设也是只有1和2两个方法接口),我们要做的只是增加一个产品类再增加一个工厂类就行了,如果是简单工厂或者是工厂方法的的话通常都是增加两个算法类C.1,C.2,简单工厂需要修改switch增加两个语句,工厂方法是在增加两个工厂类。可见抽象工厂的优点。
- 原理 :一个具体工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建的逻辑分在在每个具体工厂类中。所有的具体工厂继承自同一个抽象工厂。客户端创建不同产品族的工厂,产品族的工厂创建具体的产品对客户端是不可见的。
- 优点 : 增加新的产品族时,只需要增加具体工厂类,符合OCP原则
- 缺点 : 太重了