zoukankan      html  css  js  c++  java
  • 工厂模式

    复习《大话设计模式》中的《工厂模式》

          工厂模式即实例化对象,即c++中new一个对象,其中运用面向对象继承,多态;降低了模块与模块的耦合度。

          书中的例子:

    UML(unified modeling language)

    示例代码:

    #ifndef OPERATOR_H
    #define OPERATOR_H
    #include <cstring>
    #include <QDebug>
    /*抽象基类*/
    class Operator
    {
    public:
            Operator(double n1 = 0, double n2 = 0);
            virtual double  getResult() = 0;
    protected:
            
            double num1;
            double num2;
    };
    Operator::Operator(double n1, double n2)
    {
            num1 = n1;
            num2 = n2;
    };
    /*子类*/
    class Add:public Operator /*继承*/
    {
    public:
            Add(double n1, double n2):Operator(n1, n2){};
            double getResult();
    };  
    double Add::getResult()
    {
            double temp = num1 + num2;
            return temp;
    };
    class Sub:public Operator
    {
    public:
            Sub(double n1, double n2):Operator(n1, n2){};
            double getResult();
    };  
    double Sub::getResult()
    {
            double temp = num1 - num2;
            return temp;
    };
    class Multiple:public Operator
    {
    public:
            Multiple(double n1, double n2):Operator(n1, n2){};
            double getResult();
    };  
    double Multiple::getResult()
    {
            double temp = num1 * num2;
            return temp;
    };
    class Divide:public Operator
    {
    public:
            Divide(double n1, double n2):Operator(n1, n2){};
            double getResult();
    };  
    double Divide::getResult()
    {
            double temp = 0;
            if(num2 == 0)
            {
                    throw num2;
                    goto End;
            }
             temp = num1 / num2;
    End:
            return temp;
    };
    /*工厂类*/
    class Factory
    {
    public:
            Operator * createOperator(int operate, double n1 = 0, double n2 = 0);
        ~Factory();
    protected:
        Operator *oper;
    };
    Factory::~Factory()
    {
        if(oper != NULL)
            delete oper;
        oper = NULL;
    }
    /*实例化,返回基类指针*/
    Operator * Factory::createOperator(int operate, double n1, double n2)
    {
        oper = NULL;
            switch(operate)
            {
                    case '+':
                            oper = new Add(n1, n2); /*多态oper指向Add类*/
                            break;
                    case '-':
                            oper = new Sub(n1, n2);
                            break;
                    case '*':
                            oper = new Multiple(n1, n2);
                            break;
                    case '/':
                            oper = new Divide(n1, n2);
                            break;
                    default:
                            oper = NULL;
            
            }
            return oper;
    }
    #endif
    

      

  • 相关阅读:
    python 基础2.5 循环中continue与breake用法
    python 基础 2.4 while 循环
    python 基础 2.3 for 循环
    python 基础 2.2 if流程控制(二)
    python 基础 2.1 if 流程控制(一)
    python 基础 1.6 python 帮助信息及数据类型间相互转换
    python 基础 1.5 python数据类型(四)--字典常用方法示例
    Tornado Web 框架
    LinkCode 第k个排列
    LeetCode 46. Permutations
  • 原文地址:https://www.cnblogs.com/waitingforspring/p/5288208.html
Copyright © 2011-2022 走看看