设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式

简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类

代码如下:

#include <stdio.h>
#include <memory>
#include <iostream>
using namespace std;
#define COREA 0
#define COREB 1
class Core
{
public:
virtual void show(){}
};
class CoreA:public Core
{
public:
virtual void show()
{
cout << "This is corea" <<endl;
}
};
class CoreB:public Core
{
public:
virtual void show()
{
cout << "This is coreb" <<endl;
}
}; class Factory
{
public:
Core* create(int producetype); }; Core* Factory::create(int producetype)
{
switch(producetype)
{
case 0:
return new CoreA();
break;
case 1:
return new CoreB();
break;
default:
return NULL;
} }
int main()
{
Factory * fa = new Factory();
Core* pcore = fa->create(0);
pcore->show();
return 0;
}

工厂方法模式原理:通过在客户调用不同的工厂类来实现同一类对象的创建。

produce.h代码

#ifndef PRODUCE_H
#define PRODUCE_H
#include <iostream>
using namespace std;
class Core
{
public:
virtual void show(){}
};
class CoreA:public Core
{
public:
virtual void show()
{
cout << "This is corea" <<endl;
}
};
class CoreB:public Core
{
public:
virtual void show()
{
cout << "This is coreb" <<endl;
}
};
#endif

factory.h代码

#ifndef FACOTRY_H
#define FACOTRY_H
#include <iostream>
#include "produce.h"
using namespace std; class Factory
{
public:
virtual Core* create(); };
class FactoryCoreA:public Factory
{
virtual Core* create();
};
class FactoryCoreB:public Factory
{
virtual Core* create();
}; #endif

factory.cpp代码

#include <iostream>
#include "factory.h"
using namespace std;
Core* Factory::create()
{
return NULL;
}
Core* FactoryCoreA::create()
{
return new CoreA();
}
Core* FactoryCoreB::create()
{
return new CoreB();
}

客户main.cpp代码

#include <stdio.h>
#include <memory>
#include <iostream>
#include "factory.h"
#include "produce.h"
using namespace std;
#define COREA 0
#define COREB 1 int main()
{
Factory * fa = new FactoryCoreA();
Core* pcore = fa->create();
pcore->show();
return 0;
}

抽象工厂原理:抽象工厂可以创建一系列的产品,缺点如果是增加产品种类,需要重新修改抽象工厂接口和实现

部分代码如下

factory.cpp

#include <iostream>
#include "factory.h"
#include "Board.h"
using namespace std;
Core* Factory::createcore()
{
return NULL;
} Core* FactorySeriaA::createcore()
{
return new CoreA();
}
Core* FactorySeriaB::createcore()
{
return new CoreB();
} Board* Factory::createboard()
{
return NULL;
}
Board* FactorySeriaA::createboard()
{
return new BoardA();
}
Board* FactorySeriaB::createboard()
{
return new BoardB();
}

fatory.h

#ifndef FACOTRY_H
#define FACOTRY_H
#include <iostream>
#include "produce.h"
#include "Board.h"
using namespace std; class Factory
{
public:
virtual Core* createcore();
virtual Board* createboard(); };
class FactorySeriaA:public Factory
{
virtual Core* createcore();
virtual Board* createboard();
};
class FactorySeriaB:public Factory
{
virtual Core* createcore();
virtual Board* createboard();
}; #endif

新增的产品种类类Board.h

#ifndef BOARD_H
#define BOARD_H
#include <iostream>
using namespace std;
class Board
{
public:
virtual void show(){}
};
class BoardA:public Board
{
public:
virtual void show()
{
cout << "This is boarda" <<endl;
}
};
class BoardB:public Board
{
public:
virtual void show()
{
cout << "This is boardb" <<endl;
}
};
#endif

设计模式之工厂模式(Factory)的更多相关文章

  1. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

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

    在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...

  3. 设计模式~简单工厂模式(Factory)

    简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例.通常它返回的类都有一个公共的父类(或者接口对象). 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类 ...

  4. 【设计模式】工厂模式 Factory Pattern

    1)简单工厂(不是模式) 简单工厂只是一种变成习惯,并非23种设计模式之一. 简单工厂提供将实例话那种类型留给运行时判断,而非编译时指定.简单工厂模式就是由一个工厂类根据传入的参数决定创建出哪一个类的 ...

  5. 设计模式之工厂模式 Factory实现

    simpleFactory //car接口 public interface Car { void run(); } //两个实现类 public class Audi implements Car{ ...

  6. JAVA设计模式之工厂模式—Factory Pattern

    1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...

  7. java设计模式之 工厂模式Factory

    好比某种套路,经过不断实践,证明对项目结构非常有利 如果需要获取某种对象,如同获取不同的产品 需要由工厂来提供,工厂模式 可能的类或者对象:工厂类  产品:Cat  Dog  Fish ... //动 ...

  8. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  9. 设计模式(一)工厂模式Factory(创建类型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

随机推荐

  1. 学习c的第7天

    #include <stdio.h> int main() { int x=0; if (x==0) { printf("x为假\n"); } else { print ...

  2. DTD 知识归纳总结

    一:在xml文件中引用一个dtd规则. <!DOCTYPE 根元素 [元素声明]> 二: xml文档中中包含的内容模块 元素:元素是 XML 以及 HTML 文档的主要构建模块. 属性:属 ...

  3. apache日志文件详解和实用分析命令

    apache日志文件每条数据的请意义,以及一些实用日志分析命令. 一.日志分析  如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error ...

  4. php __clone需要注意的问题

      当一个对象的属性是另外一个对象时,当有一个对象复制该对象时,当复制到这个属性(一个对象)时,只复制这个属性(对象)的引用,而不复制引用的对象. class Account{ public $bal ...

  5. set_exception_handler 和 set_error_handler 函数

    定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数. 该函数用于创建运行时期间的用户自己的异常处理方法. 该函数会返回旧的异常处理程序,若失败,则返回 nul ...

  6. Linux安全运维日志排查几个 tips

    运维日志排查记录 前言 记录一些排查常见日志的命令,方法wiki,欢迎补充(Markdown 语法). 常用命令 查找关键词并统计行数 cat 2015_7_25_test_access.log | ...

  7. nexcel 读取 excel

    procedure TfrmUserV3.ImportUser(const AFileName: string); var book :IXLSWorkBook; ws : IXLSWorkSheet ...

  8. Python学习教程(learning Python)--1.2.4 Python格式化输出科学计数

    Python在浮点数据输出时,可以采用科学计数法的方式输出. 现举两个例子说明一下如何使用. eg1. 无精度要求的科学计数法浮点数据输出 >>> print(format(1234 ...

  9. 算法系列6《MAC》

    1. 简介 MAC是使用命令的所有元素(包括命令头)产生的.一条命令的完整性,包括命令数据域(如果存在的话)中的数据元,通过安全报文传送得以保证.按照如下的方式使用单重或三重DEA加密方式产生MAC: ...

  10. EMVTag系列10《发卡行公钥证书》

    Ø  90  发卡行公钥(IPK)证书 L: NCA -C(有条件):如果支持SDA,DDA CA认证过的发卡行公钥.用于脱机数据认证 Ø  9F32    发卡行公钥指数 L: 1 or 3 -C( ...