美文网首页
简单工厂模式

简单工厂模式

作者: 欧德朗 | 来源:发表于2019-02-26 20:40 被阅读0次

2019-02-26
前面也说了:
在我看来这个简单工厂模式,主要针对方向就可扩展性。
要求是实现一个简单的计算器。
为了隐藏实现细节,将运算细节单独封装,使用了封装特性。
为了代码复, 建造一个运算父类,几个运算子类继承与运算父类,使用继承特性。
为了代码得可扩展性,创建一个工厂类去实例化运算子类的对象,使用了多态特性。
具体代码如下:

#include<iostream>
using namespace std;

class Operation
{
private:
    /* data */
public:

    Operation(/* args */){
        cout << "Operation 构造" << endl;
    };
    double num_1 ;
    double num_2 ;
    virtual double GetResult(double num_1,double num_2) = 0;
    ~Operation()
    {
        cout << "Operation  析构" << endl;
    }
};

class OperationAdd :public Operation
{
private:
    /* data */
public:
    OperationAdd(/* args */){
        cout << "OperationAdd 构造" << endl;
    };
    double GetResult(double num_1,double num_2){
        cout << num_1 << " " << num_2 <<endl;   
        return (num_1 + num_2);
    }
};

class OperationSub : public Operation
{
private:
    /* data */
public:
    OperationSub(/* args */){
        cout << "OperationSub 构造" << endl;
    };
    double GetResult(double num_1,double num_2){
        cout << num_1 << " " << num_2 <<endl;
        return (num_1 - num_2);
    }
};

class Factory
{
private:
    /* data */
public:
    Factory(/* args */){
        cout << "Factory 构造" << endl;
    };
    Operation* create_Operat(string operat)
    {
        //根据传入的运算符不同,实例化不同的运算子类
        Operation* oper = NULL;
        if("+" == operat)
        oper = new OperationAdd();
        if("-" == operat)
        oper = new OperationSub();
        //将子类对象return 出去。
        return oper;
    }
    ~Factory(){
        cout << "Factory 析构" << endl; 
    }
};

int main()
{
    double num_1 ;
    double num_2 ;
    string operat;
    cout << "请输入第一个数字" << endl;
    cin >> num_1 ;
    cout << "请输入运算符 " << endl; 
    cin >> operat;
    cout << "请输入第二个数字" << endl;
    cin >> num_2 ;
    
    Factory * fa = new Factory();
    //实例化一个工厂类的对象,用工厂类的对象的create_Operat方法实例化几个运算子类的对象,
    Operation * op =  fa->create_Operat(operat);
    //父类指针指向子类对象,调用子类实现。
    double result = op->GetResult(num_1, num_2);
    cout << num_1 << " "  << operat << " " << num_2 << " = " << result << endl;
    delete fa;
    delete op;
    return 0;
}

coding 过程中遇到的问题:

Operation.cpp:(.text._ZN7Factory13create_OperatESs[_ZN7Factory13create_OperatESs]+0x41): undefined reference to `OperationAdd::OperationAdd()'
Operation.cpp:(.text._ZN7Factory13create_OperatESs[_ZN7Factory13create_OperatESs]+0x6f): undefined reference to `OperationSub::OperationSub()'

说的是构造函数没有实现的问题,需要给构造函数加入实现。

可扩展性:

在二进制做成脚本中使用了同样的设计模式,就是根据BUILD_STATIC或者是BUILD_SHAREAD来决定我们到底使用哪一个action进行处理。

如果我们想要加入别的运算符号的处理,只需要添加运算子类和添加工厂类中的case选项即可,只需要扩展,不需要修改。

类图如下:
简单工厂模式类图

相关文章

  • [Android]三种工厂模式总结。

    Android中,工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一.简单工厂模式。 定义:简单工厂...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 设计模式2-工厂模式

    工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式 简单工厂模式 简单工厂模式,就是建立一个工厂类,对实现了同一...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 设计模式-工厂模式

    一、工厂模式分类 简单工厂模式 工厂方法模式 抽象工厂模式 二、简单工厂模式 简单工厂就是讲需要new对象的那段代...

网友评论

      本文标题:简单工厂模式

      本文链接:https://www.haomeiwen.com/subject/khvzyqtx.html