工厂模式分为3种,即简单工厂模式、工厂方法模式、抽象工厂模式,其实大同小异,总结下来就是:

简单工厂模式:一个工厂,多个产品。产品需要有一个虚基类。通过传入参数,生成具体产品对象,并利用基类指针指向此对象。通过工厂获取此虚基类指针,通过运行时多态,调用子类实现。

 // Factory.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Product
{
public:
virtual void show() = ;
};
class Product_A:public Product
{
public:
void show() override
{
cout<<"Product_A"<<endl;
}
};
class Product_B:public Product
{
public:
void show() override
{
cout<<"Product_B"<<endl;
}
};
class Factory
{
public:
Product* create(int i)
{
switch(i)
{
case :
return new Product_A;
break;
case :
return new Product_B;
break;
default:
break;
}
}
}; int _tmain(int argc, _TCHAR* argv[])
{
Factory *factory = new Factory();
factory->create()->show();
factory->create()->show();
system("pause");
return ;
}

工厂方法模式:多个工厂,多个产品,每个产品对应于一个工厂。此时工厂和产品都是通过虚基类的方式构建。对于简单工厂模式,当要增加一个新产品时候,就需要在工厂类中修改代码,具体表现为多加一个参数,来识别新的产品类型。此时违反了对扩展开放,对修改关闭的原则。基于此,工厂方法模式应运而生。当增加一个新产品时,同时增加一个新工厂。增加新工厂属于扩展,不会修改以前工厂类和产品类的任何代码。可以看过多个独立的简单工厂模式构成了工厂方法模式。

 // FactoryM.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream>
#include <string>
using namespace std; class Product
{
public:
virtual void show() = ;
};
class Product_A:public Product
{
public:
void show() override
{
cout<<"Product_A"<<endl;
}
};
class Product_B:public Product
{
public:
void show() override
{
cout<<"Product_B"<<endl;
}
}; class Factory
{
public:
virtual Product* create()=;
}; class Factory_A:public Factory
{
public:
Product* create()
{
return new Product_A;
}
};
class Factory_B:public Factory
{
public:
Product* create()
{
return new Product_B;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
Factory_A *product_a = new Factory_A();
Factory_B *product_b = new Factory_B();
product_a->create()->show();
product_b->create()->show();
system("pause");
return ;
}

抽象工厂模式:多个工厂,多个产品,并且每个产品可以包含多个型号。此时工厂和产品都是通过虚基类的方式构建。每一个工厂类可以生产同一个产品的多个型号。

 // FactoryMUL.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include<string>
using namespace std; class Product1
{
public:
virtual void show() = ;
};
class Product_A1:public Product1
{
public:
void show() override
{
cout<<"Product_A1"<<endl;
}
};
class Product_B1:public Product1
{
public:
void show() override
{
cout<<"Product_B1"<<endl;
}
};
class Product2
{
public:
virtual void show() = ;
};
class Product_A2:public Product2
{
public:
void show() override
{
cout<<"Product_A2"<<endl;
}
};
class Product_B2:public Product2
{
public:
void show() override
{
cout<<"Product_B2"<<endl;
}
};
class Factory
{
public:
virtual Product1 *create1() = ;
virtual Product2 *create2() = ;
};
class Factory_A
{
public:
Product1 *create1(){ return new Product_A1;}
Product2 *create2(){ return new Product_A2;}
};
class Factory_B
{
public:
Product1 *create1(){ return new Product_B1;}
Product2 *create2(){ return new Product_B2;}
};
int _tmain(int argc, _TCHAR* argv[])
{
Factory_A *factoryA = new Factory_A();
factoryA->create1()->show();
factoryA->create2()->show(); Factory_B *factoryB = new Factory_B();
factoryB->create1()->show();
factoryB->create2()->show();
system("pause");
return ;
}

C++设计模式之-工厂模式的总结的更多相关文章

  1. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  5. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  6. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  9. C#学习之设计模式:工厂模式

    最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...

  10. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

随机推荐

  1. js中获取时间戳

    function conver(){ var date = new Date(); var year = date.getFullYear() var month=date.getMonth()+1; ...

  2. Web服务器端程序的实现

    Web服务器端程序主要是两个部分,一部分是主函数,一部门是命令处理函数.命令处理函数比较好理解就是针对客户端不同的命令进行处理,与客户端进行通信.主函数也有两个主要的功能,第一是要对程序进行初始化,其 ...

  3. JMeter的安装和目录解析

    Ubuntu系统中jmeter的安装和目录解析 作为一个Linux新手,在使用jdk时,或许会安装配置多次仍然导致无法使用情况(如无法登录系统等),请按如下步骤一步一步安装并配置 相关软件下载地址 J ...

  4. 架构私用Nuget服务器

    1.新建一个空的asp.net站点 2.通过nuget引用 Nuget.Server程序集,引用后项目会多出一些文件.修改web.config 里的apikey为你要上传包时用的apikey,我的为: ...

  5. SQL学习笔记之SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解

    0x00 建表准备 相信很多人在刚开始使用数据库的INNER JOIN.LEFT JOIN和RIGHT JOIN时,都不太能明确区分和正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这 ...

  6. 配置linux使用mail发送邮件到163邮箱

    1.进行配置 yum install -y mailx /etc/mail.rc添加对163的授权: ##########config 163 mail############set from=jso ...

  7. 20145301《Java程序设计》第10周学习总结

    20145301 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据 计算机网络 路由器和交换机组成了核心的计算机 ...

  8. center os7.2 apache+php+mysql环境配置并设置https访问

    本人阿里云购买的center os7.2系统,小程序只支持https,因此需要配置https 安装apache yum -y install httpd systemctl start httpd a ...

  9. 关于JavaScript对象,你所不知道的事(二)- 再说属性

    说完了对象那些不常用的冷知识,是时候来看看JavaScript中对象属性有哪些有意思的东西了. 不出你所料,对象属性自然也有其相应的特征属性,但是这个话题有点复杂,让我们先从简单的说起,对象属性的分类 ...

  10. Android Device Monitor 文件管理使用的常见问题

    本文参照博客:http://blog.csdn.net/aurorayqz/article/details/65705300.以下是我的实际操作. 1.使用Android Device Monitor ...