- 浏览: 369851 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:
图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。
引进抽象工厂模式
所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:
定义:
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,,当有多个抽象角色时,使用的一种工厂模式,它向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
注意:
注意产品族的概念:
是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫做相图。
详细参考:
http://baike.baidu.com/view/1580269.htm?fr=ala0_1
我的理解是:
A公司想找一个外包公司做一个项目,这个项目需要两个小组人员完成,
B公司 A小组 B小组
C公司 C小组 D小组
那么每一个小组是一个抽象产品类,而一个公司就是一个抽象工厂类,
如果和B公司合作,那么就用A小组, B小组,
如果和C公司合作,那么就用C小组,D小组
所以A公司只管和某一公司合作,而不必关心小组成员以及组成,这部分工作由被合作公司去协调解决
示例:某人喜欢做什么
注意看这“某人喜欢”与“做什么”,这可以理解为两个产品族,他们在逻辑上存在一定的关系,但又是绝对的相互独立,以下我们以“奶奶喜欢种苹果”、“爷爷喜欢种香蕉”的示例来说明。
示例中有两个产品族,那我们首先得为这两个产品族建立相应的工厂,
以下转载一下看到的一遍文章
http://www.cnblogs.com/jiese/p/3156753.html
AbstractFactory
要创建一组相关或者相互依赖的对象
作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
UML结构图:
抽象基类:
1)AbstractProductA、AbstractProductB:分别代表两种不同类型的产品,由具体的产品派生类对其实现
2)AbstractFactory:抽象工厂类,提供创建两种产品的接口CreateProductA和CreateProductB,由派生的各个具体工厂类对其实现
说明:
AbstractFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的类(ConcreteFactory)中
Abstract Factory模式和Factory最大的差别就是抽象工厂创建的是一系列相关的对象,其中创建的实现其实采用的就是Factory模式的方法,对于某个实现的有一个派生出来的抽象工厂,另一个实现有另一个派生出来的工厂
抽象工厂需要特别注意的地方就是区分不同类型的产品和这些产品的不同实现.显而易见的,如果有n种产品同时有m中不同的实现,那么根据乘法原理可知有n*m个Factory模式的使用
AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。
图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。
引进抽象工厂模式
所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:
定义:
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,,当有多个抽象角色时,使用的一种工厂模式,它向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
注意:
注意产品族的概念:
是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫做相图。
详细参考:
http://baike.baidu.com/view/1580269.htm?fr=ala0_1
我的理解是:
A公司想找一个外包公司做一个项目,这个项目需要两个小组人员完成,
B公司 A小组 B小组
C公司 C小组 D小组
那么每一个小组是一个抽象产品类,而一个公司就是一个抽象工厂类,
如果和B公司合作,那么就用A小组, B小组,
如果和C公司合作,那么就用C小组,D小组
所以A公司只管和某一公司合作,而不必关心小组成员以及组成,这部分工作由被合作公司去协调解决
示例:某人喜欢做什么
注意看这“某人喜欢”与“做什么”,这可以理解为两个产品族,他们在逻辑上存在一定的关系,但又是绝对的相互独立,以下我们以“奶奶喜欢种苹果”、“爷爷喜欢种香蕉”的示例来说明。
示例中有两个产品族,那我们首先得为这两个产品族建立相应的工厂,
某人喜欢 public interface FamilyPerson { public void like(); } 种什么(以水果为例) public interface Fruit { public void plant(); } 好了,以上就定义了“某人喜欢”与“种什么”两个工厂了,后面再来分别定义他们的实现类,首先定义“某人”的爷爷、奶奶实现类: 爷爷: public class GrandePa implements FamilyPerson { public void like() { System.out.println("Grandpa likes "); } } 奶奶: public class GrandeMa implements FamilyPerson { public void like() { System.out.println("Grandma likes "); } } 再定义“种什么”的苹果、香蕉实现类: 苹果: public class Apple implements Fruit { public void plant() { System.out.println("Plant Apple."); } } 香蕉: public class Banana implements Fruit { public void plant() { System.out.println("Plant Banana"); } } 好了,基础的工厂都有了,现在需要一个抽象工厂了,呵,就是同时引用多个基础工厂的工厂,定下“爱好”工厂如下: public interface Hobby { public Fruit getFruit(); public FamilyPerson getFamilyPerson(); } 实现爷爷喜欢种香蕉: public class GrandePaHobby implements Hobby { public FamilyPerson getFamilyPerson() { return new GrandePa(); } public Fruit getFruit() { return new Banana(); } } 实现奶奶喜欢种苹果: public class GrandeMaHobby implements Hobby { public FamilyPerson getFamilyPerson() { return new GrandeMa(); } public Fruit getFruit() { return new Apple(); } } 一切OK,来个调用实例: public class Test1 { public static void main(String[] args) { Hobby hobby = new GrandeMaHobby(); hobby.getFamilyPerson().like(); hobby.getFruit().plant(); } } 输出: Grandma likes Plant Apple.
以下转载一下看到的一遍文章
http://www.cnblogs.com/jiese/p/3156753.html
AbstractFactory
要创建一组相关或者相互依赖的对象
作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
UML结构图:
抽象基类:
1)AbstractProductA、AbstractProductB:分别代表两种不同类型的产品,由具体的产品派生类对其实现
2)AbstractFactory:抽象工厂类,提供创建两种产品的接口CreateProductA和CreateProductB,由派生的各个具体工厂类对其实现
说明:
AbstractFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的类(ConcreteFactory)中
Abstract Factory模式和Factory最大的差别就是抽象工厂创建的是一系列相关的对象,其中创建的实现其实采用的就是Factory模式的方法,对于某个实现的有一个派生出来的抽象工厂,另一个实现有另一个派生出来的工厂
抽象工厂需要特别注意的地方就是区分不同类型的产品和这些产品的不同实现.显而易见的,如果有n种产品同时有m中不同的实现,那么根据乘法原理可知有n*m个Factory模式的使用
AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。
#ifndef _PRODUCT_H_ #define _PRODUCT_H_ //抽象基类AbstractProductA,代表A类产品的抽象 class AbstractProductA { public: virtual ~AbstractProductA()=0; virtual void operation()=0; protected: AbstractProductA();//屏蔽构造函数 }; //派生类ProductA1,继承自AbstractProductA,A类产品的一种实现 class ProductA1 : public AbstractProductA { public: ProductA1(); virtual void operation(); virtual ~ProductA1(); }; //派生类ProductA2,继承自AbstractProductA,A类产品的另一种实现 class ProductA2:public AbstractProductA { public: ProductA2(); virtual void operation(); virtual ~ProductA2(); }; //抽象基类AbstractProductB,代表B类产品的抽象 class AbstractProductB { public: virtual ~AbstractProductB()=0; virtual void operation()=0; protected: AbstractProductB();//屏蔽构造函数 }; //派生类ProductB1,继承自AbstractProductB,B类产品的一种实现 class ProductB1:public AbstractProductB { public: ProductB1(); virtual void operation(); virtual ~ProductB1(); }; //派生类ProductB2,继承自AbstractProductB,B类产品的另一种实现 class ProductB2:public AbstractProductB { public: ProductB2(); virtual void operation(); virtual ~ProductB2(); }; #endif
#ifndef _FACTORY_H_ #define _FACTORY_H_ //AbstractFactory,工厂抽象基类,定义生产A类与B类产品的接口 class AbstractProductA; class AbstractProductB; class AbstractFactory { public: virtual ~AbstractFactory()=0; virtual AbstractProductA* CreateProductA()=0; virtual AbstractProductB* CreateProductB()=0; protected: AbstractFactory(); }; //ConcreteFactory1,派生类,继承自AbstractFactory //实现继承的接口,生产产品A和B的一种实现 class ConcreteFactory1:public AbstractFactory { public: ConcreteFactory1(); ~ConcreteFactory1(); virtual AbstractProductA* CreateProductA(); virtual AbstractProductB* CreateProductB(); }; //ConcreteFactory2,派生类,继承自AbstractFactory //实现继承的接口,生产产品A和B的另一种实现 class ConcreteFactory2:public AbstractFactory { public: ConcreteFactory2(); ~ConcreteFactory2(); virtual AbstractProductA* CreateProductA(); virtual AbstractProductB* CreateProductB(); }; #endif
#include "Product.h" #include <iostream> using namespace std; //AbstractProductA AbstractProductA::AbstractProductA() { cout << "AbstractProductA..." << endl; } AbstractProductA::~AbstractProductA() { cout << "~AbstractProductA..." << endl; } //ProductA1 ProductA1::ProductA1() { cout << "ProductA1..." << endl; } ProductA1::~ProductA1() { cout << "~ProductA1..." << endl; } void ProductA1::operation() {} //ProductA2 ProductA2::ProductA2() { cout << "ProductA2..." << endl; } ProductA2::~ProductA2() { cout << "~ProductA2..." << endl; } void ProductA2::operation() {} //AbstractProductB AbstractProductB::AbstractProductB() { cout << "AbstractProductB..." << endl; } AbstractProductB::~AbstractProductB() { cout << "~AbstractProductB..." << endl; } //ProductB1 ProductB1::ProductB1() { cout << "ProductB1..." << endl; } ProductB1::~ProductB1() { cout << "~ProductB1..." << endl; } void ProductB1::operation() {} //ProductB2 ProductB2::ProductB2() { cout << "ProductB2..." << endl; } ProductB2::~ProductB2() { cout << "~ProductB2..." << endl; } void ProductB2::operation() {}
#include "Factory.h" #include "Product.h" #include <iostream> using namespace std; AbstractFactory::AbstractFactory() { cout << "AbstractFactory..." << endl; } AbstractFactory::~AbstractFactory() { cout << "~AbstractFactory..." << endl; } ConcreteFactory1::ConcreteFactory1() { cout << "ConcreteFactory1..." << endl; } ConcreteFactory1::~ConcreteFactory1() { cout << "~ConcreteFactory1..." << endl; } AbstractProductA* ConcreteFactory1::CreateProductA() { return new ProductA1(); } AbstractProductB* ConcreteFactory1::CreateProductB() { return new ProductB1(); } ConcreteFactory2::ConcreteFactory2() { cout << "ConcreteFactory2..." << endl; } ConcreteFactory2::~ConcreteFactory2() { cout << "~ConcreteFactory2..." << endl; } AbstractProductA* ConcreteFactory2::CreateProductA() { return new ProductA2(); } AbstractProductB* ConcreteFactory2::CreateProductB() { return new ProductB2(); }
#include <iostream> #include "Factory.h" #include "Product.h" using namespace std; int main() { AbstractFactory* fa1 = new ConcreteFactory1(); AbstractProductA* a1 = fa1->CreateProductA(); AbstractProductB* b1 = fa1->CreateProductB(); cout << endl; AbstractFactory* fa2 = new ConcreteFactory2(); AbstractProductA* a2 = fa2->CreateProductA(); AbstractProductB* b2 = fa2->CreateProductB(); cout << endl; delete fa1; delete a1; delete b1; cout << endl; delete fa2; delete a2; delete b2; return 0; }
- _创建型模式__设计模式之抽象工厂模式_Abstract_Factory_.zip (194.6 KB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
**抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。该模式的核心在于提供一个高层接口来创建一组相关的产品对象。...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式常用于需要跨多个产品系列进行实例化的场景。 抽象工厂模式的...
工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂接口,将具体的对象创建过程封装起来,使得客户端在使用时无须关心产品类的确切实现,只需要通过工厂来获取所需的...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式...
创建型模式 (100%) 设计模式面面观(5):抽象工厂模式(AbstractFactory)-创建型模式 (100%) 设计模式面面观(6):生成器模式(Builder)-创建型模式 (100%) 设计模式面面观(7):原型模式(Prototype...
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的主要目的是为了隔离产品对象的创建过程,使得更换产品族或者...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它只需要一个具体工厂类的引用,而不需要知道如何构造这些对象的细节。这种模式的核心在于封装了...
抽象工厂模式(Abstract Factory Pattern)是面向对象设计模式中的一个重要成员,属于创建型模式的一种。它提供了一种创建一系列相关或相互依赖对象的方式,且无需指定它们具体的类。通过抽象工厂模式,可以有效地...