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
    

      

  • 相关阅读:
    系统数据查询耗时优化解决方案
    Mybatis逆向工程
    微服务架构下的分布式数据管理
    分布式或微服务架构中的分布式锁应用
    word 常用宏代码
    office2003?2007共存?版本各自打开的解决方案
    word域3
    2014新版《安全生产法》测试题
    Excel与Word套打功能使用技巧及EXCEL数据处理成绩
    word域2
  • 原文地址:https://www.cnblogs.com/waitingforspring/p/5288208.html
Copyright © 2011-2022 走看看