#pragma once#ifndef ABSTRACTFACTORY_H #define ABSTRACTFACTORY_H // 抽象基类AbstractProductA,代表产品A 的抽象
class AbstractProductA
{
public: AbstractProductA() {} virtual ~AbstractProductA(){};
}; // 派生类ConcreateProductA1,继承自AbstractProductA,代表产品A 的第一种实现
class ConcreateProductA1 : public AbstractProductA
{
public: ConcreateProductA1(); virtual ~ConcreateProductA1();
}; // 派生类ConcreateProductA2,继承自AbstractProductA,代表产品A 的第二种实现
class ConcreateProductA2 : public AbstractProductA
{
public: ConcreateProductA2(); virtual ~ConcreateProductA2();
}; // 抽象基类AbstractProductB,代表产品B 的抽象
class AbstractProductB
{
public: AbstractProductB() {} virtual ~AbstractProductB(){};
}; // 派生类ConcreateProductB1,继承自AbstractProductB,代表产品B 的第一种实现
class ConcreateProductB1 : public AbstractProductB
{
public: ConcreateProductB1(); virtual ~ConcreateProductB1();
}; // 派生类ConcreateProductB2,继承自AbstractProductB,代表产品B 的第二种实现
class ConcreateProductB2 : public AbstractProductB
{
public: ConcreateProductB2(); virtual ~ConcreateProductB2();
}; // 抽象基类AbstractFactory,工厂的抽象类,生产产品A 和产品B
class AbstractFactory
{
public: AbstractFactory(){} virtual ~AbstractFactory(){} virtual AbstractProductA* CreateProductA() = 0; virtual AbstractProductB* CreateProductB() = 0;
}; // 派生类ConcreateFactory1,继承自AbstractFactory // 生产产品A 和产品B 的第一种实现
class ConcreateFactory1 : public AbstractFactory
{
public: ConcreateFactory1(); virtual ~ConcreateFactory1(); virtual AbstractProductA* CreateProductA(); virtual AbstractProductB* CreateProductB();
}; // 派生类ConcreateFactory2,继承自AbstractFactory // 生产产品A 和产品B 的第二种实现
class ConcreateFactory2 : public AbstractFactory
{
public: ConcreateFactory2(); virtual ~ConcreateFactory2(); virtual AbstractProductA* CreateProductA(); virtual AbstractProductB* CreateProductB();
}; #endif 
#include "StdAfx.h"
#include "abstractfactory_impl.h"#include <iostream> ConcreateProductA1::ConcreateProductA1()
{ std::cout << "construction of ConcreateProductA1\n";
} ConcreateProductA1::~ConcreateProductA1()
{ std::cout << "destruction of ConcreateProductA1\n";
} ConcreateProductA2::ConcreateProductA2()
{ std::cout << "construction of ConcreateProductA2\n";
} ConcreateProductA2::~ConcreateProductA2()
{ std::cout << "destruction of ConcreateProductA2\n";
} ConcreateProductB1::ConcreateProductB1()
{ std::cout << "construction of ConcreateProductB1\n";
} ConcreateProductB1::~ConcreateProductB1()
{ std::cout << "destruction of ConcreateProductB1\n";
} ConcreateProductB2::ConcreateProductB2()
{ std::cout << "construction of ConcreateProductB2\n";
} ConcreateProductB2::~ConcreateProductB2()
{ std::cout << "destruction of ConcreateProductB2\n";
} ConcreateFactory1::ConcreateFactory1()
{ std::cout << "construction of ConcreateFactory1\n";
} ConcreateFactory1::~ConcreateFactory1()
{ std::cout << "destruction of ConcreateFactory1\n";
} AbstractProductA* ConcreateFactory1::CreateProductA()
{ return new ConcreateProductA1();
} AbstractProductB* ConcreateFactory1::CreateProductB()
{ return new ConcreateProductB1();
} ConcreateFactory2::ConcreateFactory2()
{ std::cout << "construction of ConcreateFactory2\n";
} ConcreateFactory2::~ConcreateFactory2()
{ std::cout << "destruction of ConcreateFactory2\n";
} AbstractProductA* ConcreateFactory2::CreateProductA()
{ return new ConcreateProductA2();
} AbstractProductB* ConcreateFactory2::CreateProductB()
{ return new ConcreateProductB2();
}
// AbstractFactory.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include "abstractfactory_impl.h"
#include <stdlib.h>//提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
int _tmain(int argc, _TCHAR* argv[])
{// 生产产品A 的第一种实现 AbstractFactory *pFactory1 = new ConcreateFactory1; AbstractProductA *pProductA = pFactory1->CreateProductA(); // 生产产品B 的第二种实现 AbstractFactory *pFactory2 = new ConcreateFactory2; AbstractProductB *pProductB = pFactory2->CreateProductB(); delete pFactory1; delete pProductA; delete pFactory2; delete pProductB; system("pause"); return 0;
}

设计模式-创建型-抽象工厂相关推荐

  1. [设计模式-创建型]抽象工厂(Abstract Factory)

    概括 名称 Abstract Factory 结构 动机 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个 ...

  2. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  3. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  4. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  5. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  6. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  7. python创建方法draw_【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  8. 设计模式 — 创建型模式 — 工厂模式

    目录 文章目录 目录 工厂模式(Factory Pattern) 应用场景 编码示例 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 工厂模式(Factory Pattern) 工厂模式(Fac ...

  9. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...

最新文章

  1. 技术面试,高效求职准则
  2. 写给开发向产品转型的同学的3句话
  3. ubuntu16.04安装UR3/UR5/UR10机械臂的ROS驱动并实现gazebo下Moveit运动规划仿真以及真实UR3机械臂的运动控制(3)
  4. MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则
  5. 一段基于Jsoup和Dom4j的海报爬取小程序
  6. 利用python脚本(re)抓取美空mm图片
  7. 七夕节:妹纸,找个程序员做男朋友吧!
  8. bzoj3124 [Sdoi2013]直径 直径+树形dp
  9. [导入]DataHelper
  10. HDU1287+枚举
  11. 【气动学】基于matlab RBF神经网络控制卫星轨道和姿态【含Matlab源码 377期】
  12. fleaPHP框架的一些基础问题
  13. FPGA工程师笔试面试题(一)
  14. 使用word代码域自动为图表 标号
  15. 8B/10B编码基本原理
  16. 程序人生——苏嵌第六天
  17. cocos入门8:动画系统
  18. 基于C#的单机版连连看游戏设计与实现
  19. [ISP]AT89S52的ISP功能简介
  20. Python OpenSSL 解析证书

热门文章

  1. java继承和引用_浅谈Java继承、传递
  2. HTML学习01之初识HTML
  3. 【Linux】8.安装tensorrt和遇到的问题及解决方法
  4. 编码练习——Java-6-类的高级特性
  5. Mysql 多表联合查询效率分析及优化
  6. 每个程序员都必读的10篇文章
  7. 清华大学计算机图形学课程
  8. Coursera课程Python for everyone:Quiz: Regular Expressions
  9. 逃出你的肖申克(三):遇见20万年前的自己
  10. Java.math包中常用的类