设计模式--简单工厂模式 实例

本文介绍了一个使用C++实现的简单计算器程序,该程序通过工厂模式动态创建加、减、乘、除四种运算对象。用户可以输入两个数字,程序将根据所选操作返回计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main.cpp:

#include <iostream>  

#include <string>
using namespace std;

#include "operation.h"
#include "operationAdd.h"
#include "operationSub.h"
#include "operationMul.h"
#include "operationDiv.h"
#include "operationFactory.h"

int main()  
{  
    Factory *q = new Factory();

    //class Add
    cout<<"class Add example:\n";
    operation *p_add= q->create(1);  
    double number_A, number_B;  
    cout<<"please input number_A value:";  
    cin>>number_A;  
    p_add->setValueA(number_A);
    cout<<"please input number_B value:";  
    cin>>number_B;  
    p_add->setValueB(number_B);
    p_add->getResult();
    delete p_add;
    p_add = NULL;

    //class Sub
    cout<<"class Sub example:\n";
    operation *p_sub = q->create(2);   
    cout<<"please input number_A value:";  
    cin>>number_A;  
    p_sub->setValueA(number_A);
    cout<<"please input number_B value:";  
    cin>>number_B;  
    p_sub->setValueB(number_B);
    p_sub->getResult();
    delete p_sub;
    p_sub = NULL;

    //class Mul
    cout<<"class Mul example:\n";
    operation *p_mul = q->create(3);   
    cout<<"please input number_A value:";  
    cin>>number_A;  
    p_mul->setValueA(number_A);
    cout<<"please input number_B value:";  
    cin>>number_B;  
    p_mul->setValueB(number_B);
    p_mul->getResult();
    delete p_mul;
    p_mul = NULL;

    //class Div
    cout<<"class Div example:\n";
    operation *p_Div = q->create(4);   
    cout<<"please input number_A value:";  
    cin>>number_A;  
    p_Div->setValueA(number_A);
    cout<<"please input number_B value:";  
    cin>>number_B;  
    p_Div->setValueB(number_B);
    p_Div->getResult();
    delete p_Div;
    p_Div = NULL;
    
    return 0;  
}  


operation.h :

class operation  
{  
public:  
    virtual void getResult() = 0;   
    virtual void setValueA(double m_r) = 0;
    virtual void setValueB(double m_r) = 0;
};  
   
operationAdd.h :

class Add:public operation
{  
private:  
    double number_A;
    double number_B;
public:  
    //Add(double r);  
    void getResult();
    void setValueA(double m_r);
    void setValueB(double m_r);
};  

void Add::getResult()  
{  
    double result;
    result = number_A + number_B;
    cout<<"The result is :"<<result<<endl;  
}
void Add::setValueA(double m_r)
{
    number_A= m_r;
}

void Add::setValueB(double m_r)
{
    number_B= m_r;
}
     
operationSub.h  :

class Sub:public operation
{  
private:  
    double number_A;
    double number_B;
public:  
    //Add(double r);  
    void getResult();
    void setValueA(double m_r);
    void setValueB(double m_r);
};  

void Sub::getResult()  
{  
    double result;
    result = number_A - number_B;
    cout<<"The result is :"<<result<<endl;  
}
void Sub::setValueA(double m_r)
{
    number_A= m_r;
}

void Sub::setValueB(double m_r)
{
    number_B= m_r;
}


operationMul.h  :

class Mul:public operation
{  
private:  
    double number_A;
    double number_B;
public:  
    //Add(double r);  
    void getResult();
    void setValueA(double m_r);
    void setValueB(double m_r);
};  

void Mul::getResult()  
{  
    double result;
    result = number_A * number_B;
    cout<<"The result is :"<<result<<endl;  
}
void Mul::setValueA(double m_r)
{
    number_A= m_r;
}

void Mul::setValueB(double m_r)
{
    number_B= m_r;
}
   

operationDiv.h  :

class Div:public operation
{  
private:  
    double number_A;
    double number_B;
public:  
    //Add(double r);  
    void getResult();
    void setValueA(double m_r);
    void setValueB(double m_r);
};  

void Div::getResult()  
{  
    double result;
    if (number_B == 0)
    {
        cout<<"The div data is not zero!!\n";
        return;
    }
    result = number_A / number_B;
    cout<<"The result is :"<<result<<endl;  
}
void Div::setValueA(double m_r)
{
    number_A= m_r;
}

void Div::setValueB(double m_r)
{
    number_B= m_r;
}

operationFactory.h  :

class Factory
{
    public:
    operation* create(int type)
    {
        switch (type)
        {
        case 1:
            return new Add();
        case 2:
            return new Sub();
        case 3:
            return new Mul();
        case 4:
            return new Div();
        default:
            return NULL;
        }
    }
};

所有的.h文件跟.cpp文件一样!!

运行结果如下:

ngnsvr9 [** NONE **]/home/xionghailong/mode $ g++ main.cpp -o main

ngnsvr9 [** NONE **]/home/xionghailong/mode $ ./main
class Add example:
please input number_A value:1
please input number_B value:2
The result is :3
class Sub example:
please input number_A value:3
please input number_B value:4
The result is :-1
class Mul example:
please input number_A value:2
please input number_B value:3
The result is :6
class Div example:
please input number_A value:2
please input number_B value:3
The result is :0.666667 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值