b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

简单工厂模式代码_简单工厂模式_简单工厂模式 java

电脑杂谈  发布时间:2017-02-26 09:23:12  来源:网络整理

今天学了大话设计模式,书中第一章讲述了简单工厂模式,用的是C#来描述,于是我在学习之余将书中描述的内容以C++的形式重写一遍,以作加深自己的学习印象。

首先什么是“简单工厂模式”,应该是:用一个单独的类来做创造实例的过程。(大话设计模式P10)

书中用到的例子是小型的计算器,对应有多种操作算符。等待输入操作数和操作算符以后,根据输入的符号来生产用于计算的操作,这就是这次“简单工厂模式”的应用。

以下是我用C++描述的代码:

为简便我省略掉头文件和命名空间的声明。

//操作算符的抽象类
class Operation {
public:
    double numberA;    //2个操作数
    double numberB;
    virtual double GetResult() const = 0;    //用于计算的操作
};

简单工厂模式 java_简单工厂模式_简单工厂模式代码

以下分别是加法“+”、减法“-”、乘法“*”和除法“/”的操作定义

//加法
class OperationAdd : public Operation {
public:
    double GetResult() const {
        return numberA + numberB;
    }
};
//减法
class OperationSub : public Operation {
public:
    double GetResult() const {
        return numberA - numberB;
    }
};
//乘法
class OperationMul : public Operation {
public:
    double GetResult() const {
        return numberA * numberB;
    }
};
//除法,考虑到除数可能为0的情况,这里利用标准库的数值类numeric_limits<>来输出double的最大值。
class OperationDiv : public Operation {
public:
    double GetResult() const {
        if (numberB == 0)
            return numeric_limits<double>::max();
        else
            return numberA / numberB;
    }
};

操作算符都定义好以后,我们开始工厂类。

//工厂类
class OperationFactory {
public:
    static Operation* createOperation(char c) {
        switch (c) {
        case '+':
            return new OperationAdd();
        case '-':
            return new OperationSub();
        case '*':
            return new OperationMul();
        case '/':
            return new OperationDiv();
        }//利用switch来检测输入了哪个操作算符
    }
};

现在我们在客户端中测试一下以上的类。简单工厂模式

int main() {
        //为了方便,以下都是没有检测输入的结果是否正确
    double numberA = 0, numberB = 0;
    char oper;
    cout << "请输入第一个操作数: ";
    cin >> numberA;
    cout << "请输入操作算符:";
    cin >> oper;
    cout << "请输入第二个操作数: ";
    cin >> numberB;
        //利用工厂类的静态方法创建出操作算符的对象
    Operation *operation = OperationFactory::createOperation(oper);
    operation->numberA = numberA;
    operation->numberB = numberB;
        //利用算符对象的方法得出结果
    cout << "结果为:" << operation->GetResult() << endl;
    return 0;
}

简单工厂模式代码_简单工厂模式 java_简单工厂模式

测试结果:

相应的UML类图是:

其实这样子把操作算符封装起来也有助于我们修改:

1、当我们需要修改除法或其他已有算法时,只需要修改相应的操作算法类即可,不必涉及到其他的操作。简单工厂模式

2、当我们需要添加新的算法时,只需要提添加相应的新类,和在工厂类中增添switch,便可以轻松修改功能。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34579-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...