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

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

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

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


模式结构说明:

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

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

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

        Product:具体产品。



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

                          抽象工厂模式提供一个接口,用于创建相关或者依赖对象的家族,而不需要
                               指定具体实现类。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模
                               式。抽象工厂模式可以向客户端提供一个接口,使用客户端在不必指定具体
                               产品的情况下,创建多个产品族中的产品对象。当有多个抽象产品角色是,
                              工厂方法模式已经不能满足要求。
抽象工厂模式和工厂方法模式的区别:
                (1)工厂方法模式通过继承的方式实现应用程序的解耦,而抽象工厂模式则
                         通过对象组合的方式实现应用程序的解耦。
                (2)工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具
                         体产品,而抽象工厂模式用来创建一个产品家族的抽象类型。

优点:

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

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

缺点:

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值