设计模式——抽象工厂模式(C++实现)


#include <iostream>
#include <string> using namespace std; class STAbstractProductA
{
public:
virtual void use() = ;
}; class STProductA1: public STAbstractProductA
{
public:
virtual void use()
{
cout<< "use ProductA1............"<< endl;
}
}; class STProductA2: public STAbstractProductA
{
public:
virtual void use()
{
cout<< "use ProductA2............"<< endl;
}
}; class STAbstractProductB
{
public:
virtual void eat() = ;
}; class STProductB1: public STAbstractProductB
{
public:
virtual void eat()
{
cout<< "eat ProductB1............"<< endl;
}
}; class STProductB2: public STAbstractProductB
{
public:
virtual void eat()
{
cout<< "eat ProductB2............"<< endl;
}
}; class STAbstractFactory
{
public:
virtual STAbstractProductA* CreateProductA() = ;
virtual STAbstractProductB* CreateProductB() = ;
}; class STConcreteFactoryA: public STAbstractFactory
{
public:
virtual STAbstractProductA* CreateProductA()
{
return new STProductA1;
}
virtual STAbstractProductB* CreateProductB()
{
return new STProductB1;
}
}; class STConcreteFactoryB: public STAbstractFactory
{
public:
virtual STAbstractProductA* CreateProductA()
{
return new STProductA2;
}
virtual STAbstractProductB* CreateProductB()
{
return new STProductB2;
}
}; int main(int argc, char* argv[])
{
STAbstractFactory* fc = new STConcreteFactoryA();
STAbstractProductA* pa = fc->CreateProductA();
STAbstractProductB* pb = fc->CreateProductB(); pa->use();
pb->eat(); STAbstractFactory* fc2 = new STConcreteFactoryB();
STAbstractProductA* pa2 = fc2->CreateProductA();
STAbstractProductB* pb2 = fc2->CreateProductB(); pa2->use();
pb2->eat(); return ;
}
////////////////////////////////////////
[root@ ~/learn_code/design_pattern/9_abstract_factory]$ ./abstract_factory
use ProductA1............
eat ProductB1............
use ProductA2............
eat ProductB2............
设计模式——抽象工厂模式(C++实现)的更多相关文章
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- 深入浅出设计模式——抽象工厂模式(Abstract Factory)
模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...
- 24种设计模式--抽象工厂模式【Abstract Factory Pattern】
女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...
- C++设计模式——抽象工厂模式
问题描述 之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Produ ...
- 设计模式 | 抽象工厂模式(abstract factory)
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...
- 设计模式 — 抽象工厂模式(Abstract Factory)
工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...
- 设计模式--抽象工厂模式C++实现
抽象工厂模式C++实现 1定义 为创建一组相关或者依赖的对象提供一个接口,且无需指定他们的具体类 2类图 3实现 class AbstractProduct { protected: Abstract ...
- C#设计模式--抽象工厂模式(创建型模式)
一.抽象工厂模式: 在工厂模式中具体的产品和具体的工厂是一一对应的,一个工厂只能生产一种产品,结构单一,例如小米公司刚开始是只生产小米手机,但是伴随着公司的发展,他们需要生产不同型号的手机,也会生产路 ...
随机推荐
- UVA - 12333 字典树+大数
思路:用字典树将前40个数字记录下来,模拟大数加法即可. AC代码 #include <cstdio> #include <cmath> #include <algori ...
- filebeat.yml(中文配置详解)
################### Filebeat Configuration Example ######################### ####################### ...
- eclipse hadoop1.2.0配置及wordcount运行
"error: failure to login"问题 http://www.cnblogs.com/xia520pi/archive/2012/05/20/2510723.htm ...
- MSQL的基准测试
Mysql基准测试 基准测试 直接.简单.易于比较,用于评估服务器的处理能力 压力测试 对真实的月数据进行测试,获得真是系统所能承受的压力 基准测试的目的 1.建立MySQL服务器的性能基准线 2.模 ...
- flask中jinjia2模板引擎详解4
接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...
- Caffe、TensorFlow、MXnet三个开源库对比
库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...
- mysql常用基础操作语法(十)~~子查询【命令行模式】
mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后 ...
- VxWorks:添加自己组件到Tornado
项目要求将cpci的驱动做成Tornado组件,尝试了一下! Folder FOLDER_CPCI { //上层组件设置 NAME cpci componen ...
- java注解之二
从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...
- Dictionary排序
有时候由于某些要求会对Dictionary排序,一般有两种方法. 1.使用SortedDictionary. 这种自动会对保存的值进行排序. static void Main(string[] arg ...