简单工厂模式

 简单工厂模式是类的创建模式,又称静态工厂方法模式。由一个工厂对象决定哪一种产品实例

工厂模式的几种形态:

  • 简单工厂(Simple Factory)模式

  • 工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或虚构构造子模式

  • 抽象工厂(Abstract  Factory)模式:又称工具箱模式

    简单工厂模式_第1张图片

    简单工厂模式的简略类图

    简单工厂模式_第2张图片 

简单工厂模式的实现:

在真实系统中,产品的层次结构可能很复杂。

简单工厂模式_第3张图片

这个时候简单工厂采用以不变应万变的策略,一律使用同一个工厂

简单工厂模式_第4张图片

Factory类到product类的虚线代表创建(依赖)关系;Client到其他类的连线是一般依赖关系。

好处:设计简单,产品类的等级结构不会反应到工厂类中去,从而产品类结构改变不会影响到工厂类

缺点:新产品加入,必然导致修改工厂


使用Java接口或者Java抽象类

如果模式所产生的具体产品彼此之间没有共同商业逻辑,抽象产品角色可以由接口扮演;

相反, 这些具体的产品类之间有共同商业逻辑,那么就应该讲共同逻辑移动到抽象角色中,这就意味着抽象角色应当由抽象类来扮演。

在一个类型的等级结构中,共同的代码应该尽量上移

简单工厂模式_第5张图片

综上,简单工厂模式的优缺点:

优点:模式的核心是工厂类。这个类含有必要的判断逻辑,可以决定什么时候创建哪一个产品实例。而客户端则可以免除直接穿件产品对象的责任,而仅仅负责“消费”产品。简单工厂模式通过这种做噶实现了对责任的分割。

缺点:正如前面所提到的,当产品类由负复杂的多层次等级结构时,工厂类只有他自己。以不变应万变就是模式的缺点。

这个工厂类集中了所有产品创建逻辑,形成了一个无所不知的去全能类,有人将其称为上帝类(God Class)。如果这个全能类代表的是农场的一个具体的园丁的话,那么这个园丁就需要对所有的产品负责,是关键人物。如果什么时候不能正常工作了,整个农场就会受到影响。

将这么多逻辑集中在一个类里面的另一个缺点是当产品有不同的接口种类时,工厂类需要判读单在什么时候创建某种产品,时机判断和哪一种具体产品的逻辑判断混在一起,将来功能扩展会很困难。这一缺点在工厂方法模式中得到克服。

由于简单工厂模式使用静态方法作为工厂方法,而静态方法无法有子类继承,因此,工厂角色无法给予继承等级结构。这一缺点在工厂方法模式中的到克服。


你可能感兴趣的:(简单工厂模式)