抽象工厂 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 ...
随机推荐
- KVM中断虚拟化浅析
2017-08-24 今天咱们聊聊KVM中断虚拟化,虚拟机的中断源大致有两种方式,来自于用户空间qemu和来自于KVM内部. 中断虚拟化起始关键在于对中断控制器的虚拟化,中断控制器目前主要有APIC, ...
- Mysql EXPLAIN 相关疑问: Using temporary ; Using filesort
一.什么是Using temporary ; Using filesort 1. using filesort filesort主要用于查询数据结果集的排序操作,首先MySQL会使用sort_buff ...
- mysql索引详解(转)
什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的 ...
- django高级之点赞、文章评论及上传文件
目录: 点赞 文章评论 上传文件 保留页面条件 一.点赞 1.所用技术: django model F查询 js应用:$(function () {}); 为文件加载完成执行ready() 方法.等同 ...
- 模块讲解----hashlib模块(加密)
作用 用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 语法 import hashlib #md5 ...
- Qt 引用头文件 QT_BEGIN_NAMESPACE QT_END_NAMESPACE
Qt里面引入头文件的两种方式: 1. #include <QMdiArea> #include<QSplashScreen> 2. QT_BEGIN_NAMESPACE cla ...
- hdu6158 The Designer
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6158 题目: The Designer Time Limit: 8000/4000 MS (J ...
- Python: 使用生成器创建新的迭代模式
使用一个生成器函数来定义一个函数模式. def frange(start, stop, increment): x = start while x < stop: yield x x += in ...
- MySql数据库的安装和卸载
- 用opencv检测人眼并定位瞳孔位置
最近的研究要用到定位瞳孔的位置,所以上网搜了下相关的代码.总结如下: 1) 定位瞳孔可以直接使用opencv中的自带的分类器(haarcascade_eye_tree_eyeglasses.xml)来 ...