设计模式之简单工厂

代码

​ 下面既是c++实现的简单工厂设计模式的代码,这里是采用例子的方法进行描述的,让你们更加易懂,例子采用的是加、减、乘、除各个不同算法的类。此设计模式主要分为三个部分:

  1. 工厂函数,负责生产出具体算法类,对应下面代码的 O p e r a t i o n F a c t o r y OperationFactory OperationFactory
  2. 算法类的抽象,是不同算法的基类,对应下面代码的 O p e r a t i o n Operation Operation
  3. 具体的算法类,算法的具体类,对应下面代码的 O p e r a t i o n A d d , O p e r a t i o n S u b , O p e r a t i o n M u l , O p e r a t i o n D i v OperationAdd,OperationSub,OperationMul,OperationDiv OperationAdd,OperationSub,OperationMul,OperationDiv
#include <iostream>
#include <string>
using std::string;

class Operation
{
    protected:
        double numberA;
        double numberB;
    public:
        Operation():numberA(0),numberB(0){};
        Operation(double A,double B):numberA(A),numberB(B){};
        void setA(double A){numberA = A;};
        void setB(double B){numberB = B;};
        virtual double getResult() = 0;
};

class OperationAdd : public Operation
{
    public:
        virtual double getResult(){return numberA + numberB;};
};

class OperationSub : public Operation
{
    public:
        virtual double getResult(){return numberA - numberB;};
};

class OperationMul : public Operation
{
    public:
        virtual double getResult(){return numberA * numberB;};
};

class OperationDiv : public Operation
{
    public:
        virtual double getResult(){return numberA / numberB;};
};

class OperationFactory
{
    public:
        static Operation * creatOperation(int operation)
        {
            Operation *result = nullptr;
            switch(operation)
            {
                case '+':
                    result = new OperationAdd();
                    break;
                case '-':
                    result = new OperationSub();
                    break;
                case '*':
                    result = new OperationMul();
                    break;
                case '/':
                    result = new OperationDiv();
                    break;
            }
            return result;
        }
};

int main()
{
    Operation *oper = nullptr;
    oper = OperationFactory::creatOperation('/');
    oper->setA(9);
    oper->setB(8);
    std::cout<<oper->getResult()<<"\n";
    delete oper;
    return 0;
}

详细表述

  1. 首先我们声明一个基类指针,给它赋值具体的算法类(抽象的使用各个具体的算法类)
  2. 加减乘除是二元算法,需要设置两个值,这是所有算法一样的操作,不需要改变,因此不用使用虚函数
  3. 每个算法类包括基类,都有一个方法 g e t R e s u l t getResult getResult获取最后的结果,不同的算法具体的实现不一样,因此需要重写,设置为虚函数
  4. 工厂类接受一个字符类型参数,利用 s w i t c h switch switch来生成不同的具体算法类按指针返回,赋给基类指针
  5. 然后我们使用的时候直接使用基类指针进行调用,采用运行时判断使得不同的类调用不同的虚函数 g e t R e s u l t getResult getResult实现多态

后续

后续还有工厂模式,抽象工厂模式,可以一块食用。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值