设计模式:抽象工厂模式

Blaze 2018-12-15

抽象工厂模式

关系图

设计模式:抽象工厂模式

问题:

简单工厂模式与工厂方法模式真正的避免了代码的改动了?

没有。

在简单工厂模式中,新产品的加入要修改工厂角色中的判断语句;

而在工厂方法模式中,要么将判断逻辑留在抽象工厂角色中,要么在客户程序中将具体工厂角色写死(就象上面的例子一样)。

而且产品对象创建条件的改变必然会引起工厂角色的修改。

用意:

给客户端提供一个接口,可以创建多个产品族中的产品对象。

条件:

1)系统中有多个产品族,而系统一次只可能消费其中一族产品。 ;

2)同属于同一个产品族的产品以其使用。 ;

角色: ;

1)抽象工厂角色: ;这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 ;

2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。

4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

缺点:

抽象模式最大的缺点就是产品族的扩展,如果要加一个新的产品,差不多所有的工厂类都需要进行修改,

所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

工厂方法与抽象工厂比较:

工厂方法模式:

【一】个抽象产品类,可以派生出多个具体产品类。 ;

一个抽象工厂类,可以派生出多个具体工厂类。 ;

;每个具体工厂类只能创建【一】个具体产品类的实例。

抽象工厂模式:

【多】个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 ;

一个抽象工厂类,可以派生出多个具体工厂类。 ;

;每个具体工厂类可以创建【多】个具体产品类的实例。 ;

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 ;

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个

相关推荐

82602411 / 0评论 2016-09-23