抽象工厂 C++实现
抽象工厂(Abstract Factory)
抽象工厂是为了提供一系列相关或相互依赖对象的接口。对象创建型模式的一种。
客户Client
抽象工厂接口AbstractFactory
抽象工厂的实现类ConcreteFactory
抽象产品接口AbstractProduct
产品实现类ConcreteProduct

需要生产的几种产品分别是:ConcreteProductA1/ConcreteProductA2/ConcreteProductB1/ConcreteProductB2。
各个系列产品的启动和退出方式相同,但是运行方式不同。这里分别用一个具体工厂ConcreteFactory1和ConcreteFactory2的对象来生产多种产品。
首先是Abstact以及Concrete Product:
下面的代码应该注意的是,ConcreteProductA1与ConcreteProductB1实际上是属于同一产品族的。所谓的统一产品族指的是类似的产品,例如BenzSportCar和BmwSportCar和AudiSportCar属于SportCar产品族.
class AbstractProductA{
public:
AbstractProductA(){}
virtual ~AbstractProductA(){}
void start(){
cout << "Product A start like this !" << endl;
}
virtual void execute() = ;
void exit(){
cout << "Product A exit like this !" << endl;
}
};
class ConcreteProductA1 : public AbstractProductA{
public:
ConcreteProductA1(){}
~ConcreteProductA1(){}
void execute(){
cout << "ConcreteProductA1 execute like this!" << endl;
}
};
class ConcreteProductA2 : public AbstractProductA{
public:
ConcreteProductA2(){}
~ConcreteProductA2(){}
void execute(){
cout << "ConcreteProductA2 execute like this!" << endl;
}
};
class AbstractProductB{
public:
AbstractProductB(){}
virtual ~AbstractProductB(){}
void start(){
cout << "Product B start like this!" << endl;
}
virtual void execute() = ;
void exit(){
cout << "ProductB exit like this!" << endl;
}
};
class ConcreteProductB1 : public AbstractProductB{
public:
ConcreteProductB1(){}
~ConcreteProductB1(){}
void execute(){
cout << "concreteProductB1 execute like this!" << endl;
}
};
class ConcreteProductB2 : public AbstractProductB{
public:
ConcreteProductB2(){}
~ConcreteProductB2(){}
void execute(){
cout << "concreteProductB2 execute like this!" << endl;
}
};
之后就是Abstract以及Concrete Factory:
class AbstractFactory{
public:
AbstractFactory(){}
virtual ~AbstractFactory(){}
virtual AbstractProductA * createProductA() = ;
virtual AbstractProductB * createProductB() = ;
};
class ConcreteFactory1 : public AbstractFactory{
public:
ConcreteFactory1(){}
~ConcreteFactory1(){}
AbstractProductA * createProductA();
AbstractProductB * createProductB();
};
AbstractProductA * ConcreteFactory1::createProductA()
{
return new ConcreteProductA1();
}
AbstractProductB * ConcreteFactory1::createProductB()
{
return new ConcreteProductB1();
}
class ConcreteFactory2 : public AbstractFactory{
public:
ConcreteFactory2(){}
~ConcreteFactory2(){};
AbstractProductA * createProductA();
AbstractProductB * createProductB();
};
AbstractProductA * ConcreteFactory2::createProductA()
{
return new ConcreteProductA2();
}
AbstractProductB * ConcreteFactory2::createProductB()
{
return new ConcreteProductB2();
}
测试方法如下所示:
int main()
{
AbstractFactory * abf = new ConcreteFactory1();
AbstractProductA * aba = abf->createProductA();
aba->start();
aba->execute();
aba->exit();
AbstractProductB * abb = abf->createProductB();
abb->start();
abb->execute();
abb->exit(); abf = new ConcreteFactory2();
aba = abf->createProductA();
aba->start();
aba->execute();
aba->exit();
abb = abf->createProductB();
abb->start();
abb->execute();
abb->exit();
system("pause");
}
参考:
http://www.cnblogs.com/zhangchenliang/p/3700820.html 这个讲的真的很好,推荐
http://www.cnblogs.com/cbf4life/archive/2009/12/23/1630612.html
抽象工厂 C++实现的更多相关文章
- 设计模式C#合集--抽象工厂模式
抽象工厂,名字就告诉你是抽象的了.上代码. public interface BMW { public void Drive(); } public class BMW730 : BMW { publ ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
- OC编程之道-创建对象之抽象工厂方法
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. <AbstractProductA> <AbstractProductB> <Ab ...
- Objective-C 工厂模式(下) -- 抽象工厂模式
相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)
概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...
- 设计模式(四)抽象工厂模式(Abstract Factory Pattern)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建 ...
- php实现设计模式之 抽象工厂模式
<?php /*抽象工厂模式:提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类 * 创建型模式 */ //抽象小米工厂,能制造小米一,小米二 abstract class mi ...
随机推荐
- 模仿Masonary写一个计算器
1.CaculatorMaker @interface CaculatorMaker : NSObject @property(nonatomic,assign)int result; -(Cacul ...
- IDEA阿里巴巴Java开发规约插件使用
前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...
- Mybatis怎么在mapper中用多个参数
原文地址:https://github.com/mybatis/mybatis-3/wiki/FAQ How do I use multiple parameters in a mapper? Jav ...
- shoes的安装前后(一)
最近看到一个模型用到了shoes,准备自己试一试.搞了半天,也安装不成功.直接安装包,gem install shoes,失败, 从rubygems上下载最新版本的shoes 然后安装,成功了.随便写 ...
- 【深入理解JVM】:类加载器与双亲委派模型
类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字 ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online Solution
A Live Love 水. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; const i ...
- Flex开发框架cairngorm入门实例
Cairngorm是flex开发的mvc框架,现在在 adobe旗下.它架构和eclipse插件开发gef架构很相似,具体工作原理如下: 该框架就是一个Cairngorm.swc文件,大家可以到Cai ...
- c++第二十天
p111~p114: 与旧代码的接口 1.C++程序中的C风格字符串:任何出现字符串字面值的地方都可以以空字符结束的字符数组来替代. const char str[] = {"Hello, ...
- bzoj1628 [Usaco2007 Demo]City skyline(单调栈)
Description Input 第一行给出N,W 第二行到第N+1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1 Output 输出一个整数,表示城市中最少包含的建筑物数量 Sa ...