工厂模式的几种形态
- 简单工厂(Simple Factory)模式:
又称静态工厂方法模式(Static Factory Method Pattern) - 工厂方法(Factory Method)模式:
又称多态性工厂(polymorphic Factory)或虚拟造子(Virtual constructor)模式 - 抽象工厂(Abstract Factory)模式:
又称工具箱(Kit或Toolkit)模式
简单工厂
- 定义
简单工厂模式就是一个由一个工厂类根据传入的参数决定创建出那一种产品类的实例
举个例子:
工厂的作用就是会根据用户需求产生相应的产品,而不用关心产品,用户需求就是传入的参数,而产生的产品就相当于类的实例
如图简单工厂模式涉及到工厂对象,抽象产品角色以及具体产品角色等三个角色: - 工厂类(Creator)角色:
担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端直接调用创建产品对象,它往往由一个具体的Java类是实现 - 抽象产品(Product)角色:
担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们拥有共同的接口。抽象产品角色可以用一个Java接口或者Java抽象类实现 - 具体产品(Concrete Product)角色:
工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由Java类实现
多层次产品结构
在真实的系统中,产品可以形成复杂的等级结构,如图:
![](https://img.haomeiwen.com/i12937961/fd146facc8074361.png)
这个时候,简单工厂模式采取的是以不变应万变的策略,一律使用同一个工厂类如图
![](https://img.haomeiwen.com/i12937961/49db00a864ba452e.png)
图中从Factory类到各个Product类的虚线代表创建(依赖)关系,从Client到其他类的连线一般依赖关系
这样设计的好处是设计简单,产品的等级结构不会反映到工厂类中来,从而产品类的等级结构的变化也就不会影响到工厂类,缺点是增加新的产品必将导致工厂类的修改。
简单工厂模式的优点
模式的核心是工厂类,这个类含有必要的判断逻辑,可以决定在什么时候创建那一个产品类的实例。而客户端则可以免除直接创建产品对象的责任,而仅仅负责‘消费’产品。简单工厂模式通过这种做法实现了对责任的分割
简单工厂模式的缺点
工厂类集中了所有的产品创建逻辑,形成一个无所不知的全能类,有人把这种类叫做上帝类(God Class)。如果这个类不能正常工作,所有的类都会受到到影响
将这么多的逻辑集中放到一个类里面的另外一个缺点就是,当产品类由不同的接口种类时,工厂类需要判断在什么时候创建某种产品。这就使得系统进行拓展是比较困难。
由于简单工厂模式使用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级机构。这一缺点会在工厂方法模式中得到克服。
网友评论