//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

//Product.h

#pragma once
class AbstractProductA {
public:
virtual ~AbstractProductA();
protected:
AbstractProductA();
private: }; class AbstractProductB {
public:
virtual ~AbstractProductB();
protected:
AbstractProductB();
private:
}; class ProductA1 :public AbstractProductA {
public:
ProductA1();
virtual ~ProductA1();
private:
protected: }; class ProductA2 :public AbstractProductA {
public:
ProductA2();
virtual ~ProductA2();
protected:
private:
}; class ProductB1 :public AbstractProductB {
public:
ProductB1();
virtual ~ProductB1();
protected:
private: }; class ProductB2 : public AbstractProductB {
public:
ProductB2();
virtual ~ProductB2();
protected:
private: };

//Product.cpp

#include"Product.h"
#include<iostream> AbstractProductA::AbstractProductA(){}
AbstractProductA::~AbstractProductA(){}
AbstractProductB::AbstractProductB(){}
AbstractProductB::~AbstractProductB(){}
ProductA1::ProductA1() {
std::cout << "ProductA1" << std::endl;
}
ProductA1::~ProductA1(){}
ProductA2::ProductA2() {
std::cout << "ProductA2" << std::endl;
}
ProductA2::~ProductA2(){} ProductB1::ProductB1() {
std::cout << "ProductB1" << std::endl;
}
ProductB1::~ProductB1(){}
ProductB2::ProductB2() {
std::cout << "ProductB2" << std::endl;
}
ProductB2::~ProductB2() { }

//AbstractFactory.h

#pragma once
class AbstractProductA;
class AbstractProductB;
class AbstractFactory { public:
virtual ~AbstractFactory();
virtual AbstractProductA* concreateProductA() = ;
virtual AbstractProductB* concreateProductB() = ;
protected:
AbstractFactory();
private:
}; class concreateFactory1 :public AbstractFactory {
public:
concreateFactory1();
virtual ~concreateFactory1();
AbstractProductA* concreateProductA();
AbstractProductB* concreateProductB();
protected:
private:
}; class concreateFactory2 :public AbstractFactory {
public:
concreateFactory2();
virtual ~concreateFactory2();
AbstractProductA* concreateProductA();
AbstractProductB* concreateProductB();
protected:
private:
};

//AbstractFactory.cpp

#include"Product.h"
#include"AbstractFactory.h"
#include<iostream> AbstractFactory::~AbstractFactory(){}
AbstractFactory::AbstractFactory(){} concreateFactory1::concreateFactory1(){}
concreateFactory1::~concreateFactory1(){}
AbstractProductA* concreateFactory1::concreateProductA() {
return new ProductA1();
}
AbstractProductB* concreateFactory1::concreateProductB() {
return new ProductB1();
} concreateFactory2::~concreateFactory2(){}
concreateFactory2::concreateFactory2(){} AbstractProductA* concreateFactory2::concreateProductA()
{
return new ProductA2();
}
AbstractProductB* concreateFactory2::concreateProductB()
{
return new ProductB2();
}

//main.cpp

#include"Product.h"
#include"AbstractFactory.h"
#include<iostream> int main()
{
AbstractFactory* fac1 = new concreateFactory1();
fac1->concreateProductA();
fac1->concreateProductB();
AbstractFactory* fac2 = new concreateFactory2();
fac2->concreateProductA();
fac2->concreateProductB();
return ;
}

#include"Product.h"#include"AbstractFactory.h"#include<iostream>
int main(){AbstractFactory* fac1 = new concreateFactory1();fac1->concreateProductA();fac1->concreateProductB();AbstractFactory* fac2 = new concreateFactory2();fac2->concreateProductA();fac2->concreateProductB();return 0;}

设计模式-抽象工厂模式(AbstractFactory)(创建型模式)的更多相关文章

  1. 设计模式(Java版)-创建型模式之简单工厂模式

    前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...

  2. 设计模式04: Factory Methord 工厂方法模式(创建型模式)

    Factory Methord 工厂方法模式(创建型模式) 从耦合关系谈起耦合关系直接决定着软件面对变化时的行为 -模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之变更 -模块与模块之间的 ...

  3. php设计模式(一):简介及创建型模式

    我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. ...

  4. 设计模式05: Prototype 原型模式(创建型模式)

    Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...

  5. 设计模式03: Builder 生成器模式(创建型模式)

    Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将 ...

  6. .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)

    概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...

  7. .NET设计模式(7):创建型模式专题总结(Creational Pattern)

    ):创建型模式专题总结(Creational Pattern)    创建型模式专题总结(Creational Pattern) --.NET设计模式系列之七 Terrylee,2006年1月 转载: ...

  8. C#面向对象设计模式纵横谈——2.Singleton 单件(创建型模式)

    一:模式分类 从目的来看: 创建型(Creational)模式:负责对象创建. 结构型(Structural)模式:处理类与对象间的组合. 行为型(Behavioral)模式:类与对象交互中的职责分配 ...

  9. Java设计模式——建造者模式(创建型模式)

    概述   建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.   建造者模式意在为重叠构造 ...

  10. Java设计模式02:常用设计模式之工厂模式(创建型模式)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.  工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...

随机推荐

  1. 《3D_Deep_Learning_for_Robot_Perception.pdf》

    https://github.com/PrincetonVision/marvin

  2. 用VB脚本复制文件夹并跳过重复文件

    VB中可通过 scripting.filesystemobject 对象操作文件,其中复制文件或文件夹的函数参数可选覆盖或不覆盖.选择覆盖时,如果目标路径存在同名文件或文件夹,则替换掉已存在的文件.而 ...

  3. CF1253F Cheap Robot(神奇思路,图论,最短路,最小生成树/Kruskal 重构树/并查集)

    神仙题. 先考虑平方级别的暴力怎么做. 明显答案有单调性,先二分 \(c\). 先最短路预处理 \(dis_u\) 表示 \(u\) 到离它最近的充电站的距离(一开始把 \(1\) 到 \(k\) 全 ...

  4. 第04组 Alpha冲刺(4/4)

    队名:斗地组 组长博客:地址 作业博客:Alpha冲刺(4/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文 ...

  5. Mac下vim安装taglist

    1 安装taglist taglist 的安装非常简单.从vim官网的这个链接 http://www.vim.org/scripts/script.php?script_id=273,就可以下载到ta ...

  6. 【OCR系列之一】字符识别技术总览

    最近入坑研究OCR,看了比较多关于OCR的资料,对OCR的前世今生也有了一个比较清晰的了解.所以想写一篇关于OCR技术的综述,对OCR相关的知识点都好好总结一遍,以加深个人理解. 什么是OCR? OC ...

  7. python保存文字到文件中

    使用encode方法即可,举例如下: #-*-coding:utf-8-*- def save(re, name): file = open("index_cut.txt", &q ...

  8. tomcat9上传文件失败错误

    项目上线正常运行一段时间后,有一天突然所有的附件上传都出现了错误,查找项目本身的日志系统也一致没有跟踪到错误.经过几番折腾,在tomcat9-stdout.log日志中发现如下异常: ERROR or ...

  9. RaiseException函数逆向

    书中内容: 代码逆向: 存在一个疑问:为什么在ExceptionAddress本来是错误产生代码的地址,但这里给存入一个_RaiseException的偏移地址. 答案在下个函数中:rtlRaiseE ...

  10. 安装Goland开发工具

    安装Goland开发工具 开发工具: 文本类的编辑器:记事本,notepad,sublime text,atom... ​ 通过命令执行程序 IED:集成开发环境(integrated develop ...