您的位置:首页 > 其它

(一)简单工厂模式

2015-09-10 18:05 232 查看
见源码注释:

#include "stdafx.h"
#include <string>
#include <iostream>
#include <memory>//为了应用智能指针
using namespace std;

//COperation:抽象的算术类。用来代表工厂制造出的抽象产品。
//CAddOperation、CSubOperation:具体的算术类。用来代表工厂制造出的具体产品。
//CSimpleFactory:工厂类,用来根据“参数”分门别类的创造产品,返回的是一个抽象产品的指针,
//这样应用这个指针调用重写的接口时,就可以根据产品的不同而产生不同的结果,这就是多态,
//实现了产品可以独立变化,与客户端关注结果的接口解耦。

//运用模板可以忽略操作类型的影响
template<typename T>
class COperation
{
public:
    //虚析构不能少
    virtual ~COperation()
    {
        cout << "基类析构函数调用" << endl;
    }

    virtual T GetResult() = 0;

    T m_a;
    T m_b;
};

template<typename T>
class CAddOperation : public COperation<T> 
{
public:
    T GetResult()
    {
        return m_a + m_b;
    }
};

template<typename T>
class CSubOperation : public COperation<T> 
{
public:
    T GetResult()
    {
        return m_a - m_b;
    }
};

template<typename T>
class CSimpleFactory
{
public:
    //工厂“制造”的产品用智能指针管理,不用关心释放问题
    static unique_ptr<COperation<T>> CreateOperate(const string &str)
    {
        if ("+" == str)
        {
            return unique_ptr<CAddOperation<T>>(new CAddOperation<T>);
        }
        else if ("-" == str)
        {
            return unique_ptr<CSubOperation<T>>(new CSubOperation<T>);
        }
        else
        {
            return nullptr;
        }
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    unique_ptr<COperation<int>> pOper = CSimpleFactory<int>::CreateOperate("+");
    pOper->m_a = 1;
    pOper->m_b = 2;

    cout << pOper->GetResult() << endl;

    unique_ptr<COperation<double>> pOper2 = CSimpleFactory<double>::CreateOperate("-");
    pOper2->m_a = 1.5;
    pOper2->m_b = 2.0;

    cout << pOper2->GetResult() << endl;

	return 0;
}


输出:

3

-0.5

基类析构函数调用

基类析构函数调用

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: