抽象工厂模式(abstract factory pattern)------创造型模式
创建型模式:抽象工厂模式
引入概念:
1、产品等级结构:当抽象的产品由具体的工厂生产出不同的产品时,这些归属与同一类的抽象产品就构成了产品等级结构;
2、产品族:具体的工厂可以生产出来的不同产品就构成了一个产品族。
抽象工厂模式中的具体工厂不只是创建一种产品,它将负责创建一族产品;每一个具体工厂都提供了多个工厂方法用于生产多种不同类型的产品,这些产品构成了一个产品族.
在抽象工厂模式结构图中包含了4个角色。
(1)、AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法都对应一种产品;
(2)、ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中;
(3)、AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法;
(4)、ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现在抽象产品接口中声明的业务方法;


抽象工厂模式最大的缺点是:在抽象工厂模式中,增加新的产品族很方便,但是增加新的产品等级结构很麻烦。对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,严重违背了开闭原则。
优点:
1、抽象工厂模式隔离了具体类的生成,客户无需知道什么被创建,所有的具体工厂都实现了抽象工厂中声明的公共接口;
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中对象。
3、增加新的产品族时很方便,无须修改已有系统,符合开闭原则。
抽象工厂模式(abstract factory pattern)------创造型模式的更多相关文章
- 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)
假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...
- 23种设计模式之抽象工厂(Abstract Factory Pattern)
抽象工厂 当想创建一组密不可分的对象时,工厂方法似乎就不够用了 抽象工厂是应对产品族概念的.应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品.比如,每个汽车公司可能要同时生产轿车.货车. ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 【设计模式】抽象工厂模式 Abstract Factory Pattern
简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...
- 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释
抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...
- 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...
- 抽象工厂(Abstract Factory)模式
一.抽象工厂(Abstract Factory)模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family ...
- 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...
- 浅谈C++设计模式之抽象工厂(Abstract Factory)
抽象工厂(Abstract Factory)模式是为了提供一系列相关或相互依赖对象的接口.对象创建型模式的一种. 客户Client 抽象工厂接口AbstractFactory 抽象工厂的实现类Conc ...
随机推荐
- 模拟多级复选框效果的jquery代码
jquery做了个多级复选框的效果,代码总共就20+行就over了. 我又想用js来做一个看看,才写了几个方法就写不动了,兼容性要考虑很多,而且代码量直线上升. 主要分享下jquery的这个效果的实现 ...
- RhinoMock中无参数方法和无返回值方法的使用
无返回值方法,RhinoMock的例子是这么做的: demo.VoidThreeArgs(, "", 0f); LastCall.On(demo).Callback<int, ...
- AES加密 对应的 C#/JAVA 方法
由于最近在项目中用到,之前在网上找了好多,来来回回,终于整出来了. 贴出来以后用起来方便 C# [csharp] view plaincopyprint? #region AES加解密 /// < ...
- posix多线程--三种基本线程编程模型
本文介绍了三种构建线程解决方案的方式. 一.流水线:每个线程执行同一种操作,并把操作结果传递给下一步骤的线程. 代码示例如下:终端输入一个int值,每个线程将该值加1,并将结果传给下一个线程. #in ...
- 在N个元素的数组中获取K个元素的所有组合问题
可以写循环,也可以用模块. 百度许久找到一个博客 http://blog.sina.com.cn/s/blog_4a0824490101f1kc.html 详细介绍了Algorithm::Combin ...
- [WF4.0 实战] AutoResetEvent具体解释(线程独占訪问资源)
由来: 在学习工作流的过程中,宿主程序中会出现这么一段代码: staticAutoResetEvent instanceUnloaded = new AutoResetEvent(false); 然后 ...
- 【C#/WPF】键盘事件
需求:按下回车键,触发事件. 搜MSDN时,看到的键盘事件是System.Windows.Forms里的,在WPF中没法用: https://msdn.microsoft.com/zh-tw/libr ...
- 【WPF/C#】联网异步获取二进制文件(如图片)的流程
步骤: 联网异步获取Json数据. 使用Json.NET工具,反序列化Json为对应的实体类,获得该实体类的对象. 从对象身上获取图片路径(实体类中定义了头像图片是string类型的文件路径). 根据 ...
- 【WPF】两个下拉列表ComboBox的级联
需求:两个ComboBox的级联,实现城市–小区级联. 问题:个人感觉WPF的核心应该是数据绑定这块.由于时间紧迫,粗略看Binding也是一头雾水,所以用了比较简单的方法做了两个下拉列表级联的效果: ...
- elasticsearch使用笔记
安装流程 http://www.elasticsearch.org/overview/elkdownloads/下载对应系统的安装包(我下载的是tar的),下载解压以后运行es根目录下bin目录的el ...