//以下代码来源: 设计模式精解-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. 解决 eclipse出现 Address already in use: bind,以及tomcat端口占用

    在项目开发中,有时候我们发现回报这个错:解决 eclipse出现 Address already in use: bind 产生的原因是端口占用,比如你的8080端口,已经有一个进程在访问使用,但是你 ...

  2. __format__

    目录 一.__format__ 一.__format__ 自定制格式化字符串 date_dic = { 'ymd': '{0.year}:{0.month}:{0.day}', 'dmy': '{0. ...

  3. 使用Kafka建立可靠的高性能分布式消息传递基础结构

    在优锐课学习中了解到,我们可以看到实施资源适配器以将Kafka与企业Java解决方案集成.码了很多专业的相关知识, 分享给大家参考学习. 由于世界已经变得移动化,因此应用程序现在必须实时提供数据. 不 ...

  4. SQL Server字符串函数STUFF的使用

    前言: 最近有个实践练习是将学生报名数据表student中的[st_id]字段的第二个和第三个字符删除,然后在此位置插入新的字符串“200900”,其实就是替换的意思,生成新的字符串. STUFF 函 ...

  5. 前端笔记之React(一)初识React&组件&JSX语法

    一.React项目起步配置 官网:https://reactjs.org/ 文档:https://reactjs.org/docs/hello-world.html 中文:http://react.c ...

  6. Oracle基础教程(一)

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

  7. 2019 Python100道 面试 题,你会几道?

    0 遇到过得反爬虫策略以及解决方法? 1.通过headers反爬虫 2.基于用户行为的发爬虫:(同一IP短时间内访问的频率) 3.动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成 ...

  8. JVM内存分配策略,及垃圾回收算法

    本人免费整理了Java高级资料,一共30G,需要自己领取;传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 说起垃圾收集(Garbage Co ...

  9. 5-网宿CDN客户端推流NGB

    网宿NGB调度系统(类似httpdns原理)从服务端分发给客户端推流IP,实现基于APP realip精准调度模式. 参考官网介绍:https://www.wangsu.com/content/det ...

  10. dependencies和devDependencies区别

    vue-cli3.x项目的package.json中,有两种依赖: dependencies:项目依赖.在编码阶段和呈现页面阶段都需要的,也就是说,项目依赖即在开发环境中,又在生产环境中.如js框架v ...