设计模式2(工厂模式)
来源:互联网 发布:tpp播放软件 编辑:程序博客网 时间:2024/05/16 05:13
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态:
简单工厂(Simple Factory)模式
工厂方法(Factory Method)模式
抽象工厂(Abstract Factory)模式
意图
定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
工厂模式就是根据用户的需求调用响应的函数而产生的类。
工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。
抽象产品角色Product (Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。
具体产品角色ConcreteProduct (BulbLight, TubeLight):定义工厂具体加工出的对象
源码
// tttt5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <exception>
#include <string>
#include <iostream>
using namespace std;
#ifndef AFX_CLASS_OPERATION
#define AFX_CLASS_OPERATION
template <class T>
class Operation
{
public:
virtual T GetResult()
{
T result = 0;
return result;
}
virtual Operation& operator =(const Operation &A)
{
return *this;
}
public:
T _numberA;
T _numberB;
};
//加法
template <class T>
class OperationAdd:public Operation<T>
{
public:
virtual T GetResult()
{
T result = 0;
result = _numberA + _numberB;
return result;
}
};
//减法
template <class T>
class OperationSub:public Operation<T>
{
public:
virtual T GetResult()
{
T result = 0;
result = _numberA - _numberB;
return result;
}
};
//乘法
template <class T>
class OperationMul:public Operation<T>
{
public:
virtual T GetResult()
{
int result = 0;
result = _numberA * _numberB;
return result;
}
};
//除法
template <class T>
class OperationDiv:public Operation<T>
{
public:
virtual T GetResult()
{
T result = 0;
if(_numberB == 0)
{
throw 1001;
}
result = _numberA / _numberB;
return result;
}
};
#endif
//类工厂
#ifndef AFX_CLASS_OPERATIONFACTORY
#define AFX_CLASS_OPERATIONFACTORY
template <class T>
class OperationFactory
{
public:
static Operation<T>* CreateOperate(string operate)
{
Operation<T> *oper=NULL;
if(!operate.compare("+"))
oper = new OperationAdd<T>;
if(!operate.compare("-"))
oper = new OperationSub<T>;
if(!operate.compare("*"))
oper = new OperationMul<T>;
if(!operate.compare("/"))
oper = new OperationDiv<T>;
return oper;
}
};
#endif
int main(void)
{
Operation<int> *oper = NULL;
oper = OperationFactory<int>::CreateOperate("+");
oper->_numberA = 1;
oper->_numberB = 2;
cout<<oper->GetResult()<<endl;
getchar();
return 0;
}
- 设计模式学习(2)工厂模式,抽象工厂模式
- 设计模式-java工厂模式2(抽象工厂模式)
- 设计模式2(工厂模式)
- 设计模式(2)-简单工厂模式
- 设计模式(2):工厂方法模式
- java设计模式(2)--工厂模式
- 设计模式之工厂模式(2)
- 设计模式(2):工厂方法模式
- 设计模式(2):工厂方法模式
- 设计模式(2):工厂方法模式
- 设计模式(2)简单工厂模式
- (2)设计模式之工厂模式
- 设计模式(2):工厂方法模式
- 设计模式(2)--工厂模式
- 设计模式(2)------抽象工厂模式
- 设计模式(2)-抽象工厂模式
- 设计模式(2)--抽象工厂模式
- golang设计模式(2)工厂模式
- SQL2008数据压缩功能之一瞥(A Quick Look At Compression In SQL 2008)
- ASP.Net中解决中文乱码问题
- A General Framework for Motion Segmentation 中文版
- 【转】Twitter:遭受攻击
- 【转】Twitter:遭受攻击
- 设计模式2(工厂模式)
- apfuse2.0.2 nested exception is org.hibernate.hql.ast.QuerySyntaxException: Otacity is not mapped
- 【转】Twitter:遭受攻击
- C#中运行Excel、Word、Access
- 【转】Twitter:遭受攻击
- Packaging software with RPM, Part 1
- 如何制作LINUX的RPM包
- 修复mysql表
- PCR的物理意义