在设计模式的大家庭中,有漂亮的工厂三姐妹,她们分别是简单工厂、工厂方法和抽象工厂。正如我们对于工厂的理解一样,她们都是用来生产产品的,但是又各自有各自的特色。接下来我们就一起认识一下她们吧。
1 简单工厂
实例化或者增加实例化对象,用一个单独的类来做这个创造实例的过程。
1.1 UML类图
1.2 优点
简单工厂模式的工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,,对于客户端来说,去除了与具体产品的依赖。就像计算器,客户端不用管该用哪个类的实例,只需要把“+”给工厂,工厂自动就给出相应的实例。客户端只要去做运算就可以了,不同的实例有不同的运算。
1.3 缺点
当添加需求时,如现在要添加一个开方的功能,就一定要给运算工厂类的方法中添加“case”分支条件,违背了“开放-封闭原则”。
2 抽象工厂
提供一个创建一系列或相关依赖对象的接口。而无需指定它们具体的类。
2.1 UML类图
2.2 优点
抽象工厂可以解决多个类型产品的创建问题。主要体现在以下两点:
1, 易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2, 她让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
2.3 缺点
抽象工厂的类特别多,容易臃肿。当我们需要增加需求时,相耦合的类都要改动,而大批量的改动显然对于编程来讲是不好的。
3 工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其他类。
3.1 UML类图
3.2 优点
工厂方法把职责分类,这样在增加新的需求时,不需要去更改原有的体系和工厂类,只需要扩展新的类就可以了。通常设计都是从工厂方法开始的。当设计者发现需要更大的灵活性时,便会向其他相关设计模式演化。
3.3 缺点
每增加一个产品,就需要增加一个产品工厂的类,增加了开发量。
总之,工厂三姐妹各有优缺点,我们要根据需求条件的不同选择不同的设计模式。