<漫谈设计模式>======对象创建型模式之抽象工厂模式
来源:互联网 发布:php 服务器文件管理 编辑:程序博客网 时间:2024/04/30 07:18
AbstractFactory(抽象工厂模式)
1.意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.(注意关键字"一系列"就是与工厂方法模式的区别)
2.动机
考虑一个支持多种视觉效果的用户界面工具包.不同视觉效果为诸如滚动条、窗口和按钮等用户界面窗口组件定义不同的外观和行为.
为了保证视觉效果标准之间的可移植性,一个应用不应该为一个特定的视觉效果硬编码它的窗口组件.在整个应用中实例化特定视觉效果
的窗口组件类将使得以后很难改变视觉效果.
为了解决这个问题我们可以定义一个抽象的窗口组件工厂类(WidgetFactory),这个类声明了一个用来创建每一类基本窗口组件的接口.
(CreateScrollBar创建滚动条CreateWindow创建窗口).每一类创建组件都有一个抽象类,而具体子类则实现了窗口组件的特定视觉效果.
对于每一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件对象的操作(对象创建型嘛,就是做这个的).客户调用这些操作
可以获得窗口组件实例,但是他们并不知道目前正在使用的是哪些具体的类.(无需指定它们具体的类).UML图如下:
3.适用范围
<1>一个系统要独立于它的产品的创建、组合和表示时.<2>一个系统要由多个产品系列中的一个来配置时.
<3>当你要强调一系列相关的产品对象的设计以便进行联合使用时.
<4>当你提供一个产品类库,而只想显示他们的接口而不是实现时.
4.结构图
5.实现
以最上面那个UML图为例.在这个实现中,我们有两种抽象的产品Window和Scrollbar.具体到视觉效果又分了Xstyle和Ystyle.所以具体产品就有4个.
我们还需要为这两种不同类别的产品提供创建接口.而无需指定它们具体的类.既然有两种风格.我们这里直接定义XstyleWidgetFactory和YstyleWidgetFactory
分别用来生产Xstyle和Ystyle风格的产品.
WidgetFactory中定义了创建接口:XstyleWidgetFactory和YstyleWidgetFactory分别重写了虚拟函数用来创建指定视觉效果的产品:我们还有两个抽象产品类Window和ScrollBar 这里简化了,没添加属性和方法.
XtyleWindow YstyleWindow XstyleScrollBar YstleScrollBar分别继承自Window和ScrollBar
看看客户端的代码客户端代码中,没有指定具体的产品类(XsytleWindow和YstyleScrollBar)吧.而且还提供了一系列的接口CreateWindow和CreateScrollBar.
而且这里我们还可以把单例模式用进去.将XstyleWidgetFactory具体的工厂类设计成单例.因为我们只需要一个全局的接口就好了.不需要
存在多个具体工厂类的实例.
- <漫谈设计模式>======对象创建型模式之抽象工厂模式
- <漫谈设计模式>======对象创建型模式之工厂方法模式
- <漫谈设计模式>======对象创建型模式之创建者模式
- <漫谈设计模式>======对象创建型模式之单例模式
- c#设计模式==抽象工厂模式
- 用来创建对象的设计模式之抽象工厂模式
- java设计模式之创建型模式-抽象工厂模式
- 漫谈设计模式之抽象工厂模式(Abstract Factory)
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式-创建型模式-抽象工厂
- 设计模式-创建型模式-抽象工厂
- 【设计模式】创建型模式-抽象工厂
- 创建型设计模式-抽象工厂模式
- 设计模式-创建型模式之 Abstract Factory(抽象工厂)
- java设计模式(创建型)之抽象工厂模式
- 创建型设计模式之抽象工厂(Abstract Factory)模式
- 设计模式-创建型之抽象工厂模式
- Web入侵安全测试与对策学习笔记(一)——总览
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 一个忽视了的小问题
- Centos 6.2安装lnmp
- Web入侵安全测试与对策学习笔记之(二)——获取目标信息之淘金
- <漫谈设计模式>======对象创建型模式之抽象工厂模式
- 3GP/FLV/AVI 格式整理
- 抓取 网站 代理 ip
- 修改MYSQL最大连接数的3种方法
- PHP中上传大体积文件时需要的设置
- Android 打开多个Activity时,同时结束多个Activity的方法
- MinGW 使用和创建 DLL 应注意的问题
- Recordset中不容小觑的游标
- JVM学习之:内存的分配以及回收