//以下代码来源: 设计模式精解-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. 设计模式-Adapter(结构型模式)针对第三方库 函数 接口不匹配的问题,分为类模式 与 对象模式 两种

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

  2. 【OCR技术系列之二】文字定位于切割

    要做文字识别,第一步要考虑的就是怎么将每一个字符从图片中切割下来,然后才可以送入我们设计好的模型进行字符识别.现在就以下面这张图片为例,说一说最一般的字符切割的步骤是哪些. 当然,我们实际上要识别的图 ...

  3. 1+x 证书 Web 前端开发中级理论考试(试卷 6 )

    1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...

  4. models.py相关API

    models.py import datetime from django.db import models from django.utils import timezone class Quest ...

  5. ActiveMQ是什么,为什么使用MQ

    是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件. 1.系统解耦 采用中间件之后,就可以完美解决上述中因为耦合可能导致的问题.系统 A 不用去 关心下层服务调用方的问题. 2. 异步调 ...

  6. PHP JWT token实现

      原文链接:https://www.jb51.net/article/146790.htm   机制:   代码如下:   <?php /**  * PHP实现jwt  */ class Jw ...

  7. git查看/修改个人信息-用户名邮箱

    我们在使用git作为仓库管理工具时,要设置自己Git的用户名和邮箱,要不然大家一块开发时不知道谁是谁,不知道谁提交的. 另外,当我们用自己的电脑开发时你可能设置的是一个你喜欢的昵称,所以那就得改一下. ...

  8. LinkedTransferQueue

    /** *LinkedTransferQueue是有容量的, * 当第一个生产者线程调用transfer时,如果没有消费者,会阻塞. * 第二个生产者线程调用transfer时,如果没有消费者,会添加 ...

  9. Oracle基础教程(一)

    本文链接:https://blog.csdn.net/GoldenKitten/article/details/84947386 以下内容为转载以上博客,自己做了略微的补充,如需查看原文,请点击上面的 ...

  10. 数据库——SQL-SERVER练习(6) 数据库安全性

    一.实验准备 (1)运行SQL-SERVER服务管理器, 启动服务(2)运行查询分析器,  以DBA身份登录数据库服务器:      用户名sa,  密码123456(3)打开CREATE-TABLE ...