设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式
简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类
代码如下:
#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)的更多相关文章
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
- 设计模式之工厂模式(Factory模式)
在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...
- 设计模式~简单工厂模式(Factory)
简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例.通常它返回的类都有一个公共的父类(或者接口对象). 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类 ...
- 【设计模式】工厂模式 Factory Pattern
1)简单工厂(不是模式) 简单工厂只是一种变成习惯,并非23种设计模式之一. 简单工厂提供将实例话那种类型留给运行时判断,而非编译时指定.简单工厂模式就是由一个工厂类根据传入的参数决定创建出哪一个类的 ...
- 设计模式之工厂模式 Factory实现
simpleFactory //car接口 public interface Car { void run(); } //两个实现类 public class Audi implements Car{ ...
- JAVA设计模式之工厂模式—Factory Pattern
1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...
- java设计模式之 工厂模式Factory
好比某种套路,经过不断实践,证明对项目结构非常有利 如果需要获取某种对象,如同获取不同的产品 需要由工厂来提供,工厂模式 可能的类或者对象:工厂类 产品:Cat Dog Fish ... //动 ...
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
随机推荐
- hbase与Hadoop
Hbase是一种低延迟的在线系统,Hadoop是优化吞吐量的离线系统.这种互补关系造就了一种强大的.灵活的数据平台,可以用来搭建水平扩展的数据应用.
- Jquery数组操作技巧
Jquery对数组的操作技巧. 1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不 ...
- LotusPhp中配置文件组件LtConfig详解
LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ...
- OVER Clause是个好东西,常和ROW_NUMBER()、Sum、AVG、Count、Min、Max配合使用
根据SQL官方帮助的实例: USE AdventureWorks2012; GO SELECT ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY S ...
- 西门子MES解决方案SIMATIC IT在乳制品行业小试牛刀
竞争的白热化,紧缩的产品利润,食品安全保障,越来越苛刻的法规要求和全球化的市场与品牌维持的重要性对乳品行业的企业提出了更高的要求,实施 MES将是企业唯一的出路. 自从“十一五”制造业信息化为MES正 ...
- 编译android程序时DEX过程出现错误
今天编译高级设置时出现了错误,这好坑爹啊~ 于是我开始检查代码,发现代码没有错误啊,然后观察MAKE的步骤才发现是DEX时出现了问题!! 下面是错误的LOG: Information:Using ja ...
- WPF工作笔记:本地化支持、主进程通知、两种最常用异步编程方式
1.本地化支持 (1)重写控件默认的依赖属性LanguageProperty FrameworkElement.LanguageProperty.OverrideMetadata( typeof(Fr ...
- 关于datagridview的一些操作
1.绑定datatable时,会显示出不需要显示的列可以加datagridview.AutoGenerateColumns = false; 2.如果datagridview的某列是数值型的,有小数, ...
- Linux环境下常用regexp的使用
正则表达式 REGular EXPression 的简写元字符 匹配次数 位置锚定 分组 --------------------------------------元字符. 匹配任意单个字符 [ ...
- Express实现http和https服务
一.介绍Http与Https 概念 HTTP: 超文本传输协议(Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文 ...