抽象工厂(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++实现的更多相关文章

  1. 设计模式C#合集--抽象工厂模式

    抽象工厂,名字就告诉你是抽象的了.上代码. public interface BMW { public void Drive(); } public class BMW730 : BMW { publ ...

  2. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  3. 设计模式之工厂模式VS抽象工厂

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  4. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

  5. OC编程之道-创建对象之抽象工厂方法

    定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.       <AbstractProductA> <AbstractProductB> <Ab ...

  6. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  7. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

  8. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

  9. 设计模式(四)抽象工厂模式(Abstract Factory Pattern)

    一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建 ...

  10. php实现设计模式之 抽象工厂模式

    <?php /*抽象工厂模式:提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类 * 创建型模式 */ //抽象小米工厂,能制造小米一,小米二 abstract class mi ...

随机推荐

  1. React 教程

    React 入门实例教程 http://www.ruanyifeng.com/blog/2015/03/react.html React 测试入门教程http://www.ruanyifeng.com ...

  2. Shader工具

    1. RenderMonkey 2. NVIDIA FX Composer 2.5

  3. 1040. 有几个PAT(25)

    原题: https://www.patest.cn/contests/pat-b-practise/1040 思路: 先给大家扔个测试PAPAATTPATTT, 人工查一下这段字符串能组成 34个PA ...

  4. 史上最全的MonkeyRunner自动化测试从入门到精通(3)

    原文地址https://blog.csdn.net/liu_jing_hui/article/details/60956088 MonkeyRunner复杂的功能开始学习 (1)获取APK文件中ID的 ...

  5. 2.2 The Object Model -- Reopening Classes and Instances

    1. 你不需要一开始定义一个类的全部内容,你可以通过使用reopen方法重新打开一个类并定义新的属性. Person.reopen({ isPerson: true }); Person.create ...

  6. (转)SSIS_数据流转换(Union All&合并联接&合并)

    Union All : 与sql语言 Union All 一样,不用排序,上下合并多个表.Union All转换替代合并转换:输入输出无需排序,合并超过两个表 合并联接 : 有左连接.内连接.完全连接 ...

  7. JAVA构建高并发商城秒杀系统——架构分析

    面试场景 我们打算组织一个并发一万人的秒杀活动,1元秒杀100个二手元牙刷,你给我说说解决方案. 秒杀/抢购业务场景 商品秒杀.商品抢购.群红包.抢优惠劵.抽奖....... 秒杀/抢购业务特点 秒杀 ...

  8. SQL: coalesce()函数

    ①用途: 将空值替换成其他值 返回第一个非空值 ②表达式: COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达 ...

  9. 浅谈location对象

    简介 Location 对象存储在 Window 对象的 Location 属性中,表示那个窗口中当前显示的文档的 Web 地址.通过Location对象,可以获取URL中的各项信息,调用对象方法也可 ...

  10. JS地址自动返填技术

    系统设计地址为省市县三级联动,规范是规范了,但是无形中增加了系统操作的时间成本,因此设计地址自动返填技术,只要把地址拷贝到详细地址框中,可以自动返填到省市县三级联动的下拉框中. 还好洒家的大学不是混过 ...