java设计模式学习笔记--抽象工厂模式

抽象工厂模式:此模式提供了一个接口,用于创建相关或者依赖对象的家族,

而不需要指定具体的实现类。
抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,
客户类和工厂类分开,客户需要任何产品的时候,只需要向工
厂请求即可,客户无须修改就可以获得新产品。这样一来,客
户就从具体产品中解耦。

抽象工厂模式的UML结构图如下:


模式结构说明:

AbstractFactory:抽象工厂。抽象工厂定义了一个接口,所有的具体工厂都必须实现此接口,这个接口包含了一组方法用来生产产品。

ConcreteFactory:具体工厂。具体工厂是用于生产不同产品族。要创建一个产品,客户只需要使用其中一个工厂完全不需要实例化任何产品对象。

AbstractProduct:抽象产品。这是一个产品家族,每一个具体工厂都能够生产一整组产品。

Product:具体产品。

 

设计原则:(1)多用对象组合,少用继承
所谓对象组合,就是让对象作为类的成员变量,通过构造函
数或者set方法给类对象的实例变量赋值。
(2)针对抽象编程,不针对实现编程
当设计一个软件系统的时候,要尽可能地对系统中出现的各
种食物进行抽象,从而建立基础的抽象底层,这样做的目的
就是让软件结构更加框架化、系统化,系统结构更加灵活,
以维护、易扩展。
抽象和具体实现的区别就在于:有了抽象,能做很多事情,
并且新增功能不会对原系统的稳定性造成影响,系统更加模
块化,软件更加易复用;而具体实现只能完成一件事情,并
且新增功能对原系统影响比较大,对于相同结构软件不能复
用,大大降低了开发效率,而且程序不易扩展。
(3)产品对象通过工厂暴露的方法创建
使用场合:
(1)创建产品家族,相关产品集合在一起使用的时候;
(2)想要提供一个产品类库,并只想显示其接口而不是实现时;
(3)通过组合的方式使用工厂时。
抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要
指定具体实现类。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模
式。抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定具体
产品的情况下,创建多个产品族中的产品对象。当有多个抽象产品角色是,
工厂方法模式已经不能满足要求。
抽象工厂模式和工厂方法模式的区别:
(1)工厂方法模式通过继承的方式实现应用程序的解耦,而抽象工厂模式则
通过对象组合的方式实现应用程序的解耦。
(2)工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具
体产品,而抽象工厂模式用来创建一个产品家族的抽象类型。

抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要
指定具体实现类。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模
式。抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定具体
产品的情况下,创建多个产品族中的产品对象。当有多个抽象产品角色是,
工厂方法模式已经不能满足要求。

抽象工厂模式和工厂方法模式的区别:
(1)工厂方法模式通过继承的方式实现应用程序的解耦,而抽象工厂模式则
通过对象组合的方式实现应用程序的解耦。
(2)工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具
体产品,而抽象工厂模式用来创建一个产品家族的抽象类型。

优点:

1、 抽象工厂隔离了具体类的生成,是的客户端不需要知道什么被创建。所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

2、 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。

缺点:

添加新的行为时比较麻烦。如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。

猜你喜欢

转载自zhunmumu.iteye.com/blog/2119216
今日推荐