设计模式学习笔记(C++实现)(二)--工厂方法模式

1.工厂方法模式简介

  • 英文名称
    Factory Method
  • 主要目的
    定义一个用来创建对象的接口,从而让其子类来决定实例化哪一个类。工厂方法能使一个类的实例化行为,延迟到其子类中进行。
  • 使用场景
    1.当一个类不知道它所必须创建的对象的类的时候;
    2.当一个类希望由它的子类来指定它所创建的对象的时候。

2.工厂方法代码示例

  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 相关类说明
    1.Operator–抽象操作类,定义功能接口;
    2.OperatorAdd、OperatorSub–具体操作类,实现操作接口;
    3.AFactory–抽象工厂类,定义抽象工厂创建接口;
    4.AddFactory、SubFactory–具体工厂类,用于创建具体的操作类。
  • 类图
    这里写图片描述
  • 具体代码
#include <iostream>
using namespace std;

//抽象操作类
class Operator
{
public:
    virtual int Operate(int val1, int val2) = 0;              //抽象计算接口
};

//加法类
class OperatorAdd:public Operator
{
public:
    int Operate(int val1, int val2)              //计算接口
    {
        return val1 + val2;
    }
};

//减法类
class OperatorSub :public Operator
{
public:
    int Operate(int val1, int val2)              //计算接口
    {
        return val1 - val2;
    }
};

//抽象工厂类
class AFactory
{
public:
    virtual Operator* CreateOperation()=0;              //抽象创建工厂接口
};

//加法工厂类
class AddFactory:public AFactory
{
public:
    Operator* CreateOperation()              //创建工厂接口
    {
        Operator* pOperator = new OperatorAdd();
        return pOperator;
    }
};

//减法工厂类
class SubFactory :public AFactory
{
public:
    Operator* CreateOperation()              //创建工厂接口
    {
        Operator* pOperator = new OperatorSub();
        return pOperator;
    }
};


int main()
{
    int val1 = 5, val2 = 4;

    //加法操作
    AFactory* pOperaFactory1 = new AddFactory();
    if (NULL!=pOperaFactory1)
    {
        Operator* pOper1 = pOperaFactory1->CreateOperation();
        if (NULL!= pOper1)
        {
            int ret = pOper1->Operate(val1, val2);
            cout << val1 << "+" << val2 << "=" << ret << endl;

            delete pOper1;
            pOper1 = NULL;
        }

        delete pOperaFactory1;
        pOperaFactory1 = NULL;
    }

    //减法操作
    AFactory* pOperaFactory2 = new SubFactory();
    if (NULL != pOperaFactory2)
    {
        Operator* pOper2 = pOperaFactory2->CreateOperation();
        if (NULL != pOper2)
        {
            int ret = pOper2->Operate(val1, val2);
            cout << val1 << "-" << val2 << "=" << ret << endl;

            delete pOper2;
            pOper2 = NULL;
        }

        delete pOperaFactory2;
        pOperaFactory2 = NULL;
    }

    getchar();
    return 0;
}
  • 输出结果
    这里写图片描述

栏目导航
上一篇:设计模式学习笔记(C++实现)(一)–设计模式简介和分类
下一篇:设计模式学习笔记(C++实现)(三)–抽象工厂模式

参考文献:
1.《设计模式:可复用面向对象软件的基础》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值