设计模式学习笔记:Abstract Factory(抽象工厂)
来源:互联网 发布:剑网3脸型数据下载 编辑:程序博客网 时间:2024/06/13 01:51
Abstract Factory概要
Abstract Factory模式是一种对象创建模式,意图是提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们(一系列对象)具体的类。
应用场景
Abstract Factory主要使用于以下几种系统设计场景:
1)一个系统要独立于它产品的创建、组合和表示;
2)一个系统要由多个产品系列中的一个来配置;
3)在系统中强调一系列相关产品对象的设计以便进行联合使用;
4)提供一个产品类库,而只公开它们的接口而不是实现。
模式结构
Abstract Factory模式结构可以用下图来表示,该图表示了各类之间的关系:
从上面的模式结构图中我们可以看出,Abstract Factory模式主要有如下5个参与者:
1)AbstractFactory:用来声明创建抽象产品对象的接口,如图中CreateProductA()、CreateProductB()
2)ConcreteFactory:通过重写父类的操作,实现创建具体产品对象的操作
3)AbstractProduct:为一类产品对象声明一个接口
4)ConcreteProduct:通过实现AbstractProduct接口定义一个被相应的(ConcreteFactory)具体工厂创建的具体的产品对象
5)Client:仅使用AbstractFactory和AbstractProduct声明的接口
通过上述方式,客户可以在运行时刻创建ConcreteFactory的实例,这一具体工厂,可以创建有特定实现操作的具体产品对象,如果要创建不同的产品对象,客户则需要使用不同的具体工厂,另外这种设计方式可以延迟产品对象的创建,即AbstractFactory可以延迟产品对象的创建到它的ConcreteFactory子类。
AbstractFactory的优缺点
AbstractFactory采用这种设计方式可以起到1)分离具体的类、2)易于交换产品系列、3)有利于产品的一致性的作用,但缺点也是很明显的----不利于扩展(不利于使用新种类的新产品),这时因为AbstractFactory类中确定了可以被创建的产品对象的集合,如果有新的产品对象需要创建,则需要改变AbstractFactory类的接口,这将导致AbstractFactory类及其所有子类发生改变。
AbstractFactory的实现
在实现AbstractFactory的时候需要注意以下两点:
1)通常一系列产品产品对象只需要一个ConcreteFactory实例,所以工厂的实现一般采用单件Singleton。当然这只是一般情况,涉及到具体情况就要具体分析了。
2)AbstractFactory仅声明一个产品创建的接口,而具体实现则是由ConcreteFactory实现的,所以通常的做法是为每一个产品定义一个工厂方法(FactoryMethod),一个具体的工厂则重定义该工厂方法来指定产品完成产品的创建。
参考:《Design Patterns:Elements of Reusable Object-Oriented Software》- Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides.
- 设计模式学习笔记:Abstract Factory(抽象工厂)
- 设计模式学习笔记五:抽象工厂(Abstract Factory)
- 《设计模式》学习笔记——ABSTRACT FACTORY 抽象工厂
- 设计模式学习-抽象工厂(Abstract Factory)
- java设计模式学习 ----- 抽象工厂模式(Abstract Factory)
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 设计模式学习---Abstract Factory(抽象工厂)
- 设计模式学习总结:抽象工厂(Abstract Factory)
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 《设计模式精解》学习笔记(八)------Abstract Factory(抽象工厂)模式
- 设计模式学习笔记(三)——抽象工厂模式(Abstract Factory)
- 阿Sam的设计模式学习笔记----抽象工厂(Abstract Factory)模式
- 设计模式学习笔记(三)——Abstract Factory抽象工厂模式
- 【设计模式】学习笔记6:抽象工厂模式(Abstract Factory)
- 【设计模式学习笔记三】【创建型模式】【抽象工厂(Abstract Factory)】
- Oracle中的dual表到底是什么
- jQuery 无限级菜单
- ArrayList的实现原理
- shell正则表达式字符含义
- phpmyadmin安装教程
- 设计模式学习笔记:Abstract Factory(抽象工厂)
- perl学习资源汇总
- clear的设置——ecamll
- SLC和MLC闪存芯片的区别
- TCP Trace监听工具
- TCP 状态机
- TestMarquee split("<.+?>");
- Boost.Interprocess使用手册翻译之七:托管内存片段(Managed Memory Segments)
- CIF QCIF HALF D1 D1