设计模式复习-简单工厂模式

博客围绕简单工厂模式展开,介绍其在实现整数四则运算中的应用,包含基本实现、健壮实现以及工厂模式的具体内容,聚焦于信息技术领域的程序设计方法。

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

                                    简单工厂模式


实现整数四则运算 (1) 基本实现  (2) 健壮实现  (3) 工厂模式

#pragma once
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

//(1)基本实现
void BasicFun() {
    int nNumberFirst, nNumberSecond;
    char cSymbol;
    cin >> nNumberFirst;
    cin >> nNumberSecond;
    cin >> cSymbol;
    if (cSymbol == '+') cout << nNumberFirst + nNumberSecond;
    if (cSymbol == '-') cout << nNumberFirst - nNumberSecond;
    if (cSymbol == '*')cout << nNumberFirst * nNumberSecond;
    if (cSymbol == '/')cout << nNumberFirst / nNumberSecond;
    getchar();
    return ;
}
//(2)规范和健壮性实现
void StandardAndRobustFun() {
    int  nNumberFirst, nNumberSecond;
    string strSymbol="";
    try {
        cin >> nNumberFirst;
        cin >> nNumberSecond;
        cin >> strSymbol;
        if (nNumberSecond == 0 && strSymbol[0] == '/') {
            cout << "error:The dividend cannot be zero ";
            return;
        }
        switch (strSymbol[0]) {
        case '+': cout << nNumberFirst + nNumberSecond << endl; break;
        case '-': cout << nNumberFirst - nNumberSecond << endl; break;
        case '*': cout << nNumberFirst * nNumberSecond << endl; break;
        case '/': cout << nNumberFirst / nNumberSecond << endl; break;
        default:cout << "Input Format Error" << endl; break;
        }
    }
    catch (void *pErrorKey) {
        cout << "Unknow Error" << endl;
    }
    return;
}
//(3)简单工厂模式
class COperationClass {
public:
    virtual bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) = 0;
};
class CAddition :public COperationClass {
public:
    bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {
        nNumberAns = nNumberFirst + nNumberSecond;
        return true;
    }
};
class Csubtraction :public COperationClass {
public:
    bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {
        nNumberAns = nNumberFirst - nNumberSecond;
        return true;
    }
};
class Cmultiplication :public COperationClass {
public:
    bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {
        nNumberAns = nNumberFirst * nNumberSecond;
        return true;
    }
};

class Cdivision :public COperationClass {
public:
    bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {
        if (nNumberSecond == 0) {
            return 0;
        }
        nNumberAns = nNumberFirst / nNumberSecond;
        return true;
    }
};

class CFactory {
public:
    bool GetAlgorithm(const string &strSymbol, COperationClass * &pAlgorithm) {
        pAlgorithm = NULL;
        switch (strSymbol[0]) {
        case '+': pAlgorithm = new CAddition(); break;
        case '-': pAlgorithm = new Csubtraction(); break;
        case '*': pAlgorithm = new Cmultiplication(); break;
        case '/': pAlgorithm = new Cdivision(); break;
        default: return false;
        }
        return pAlgorithm != NULL;
    }
};

int main()
{
    system("color 0b");
    //BasicFun();
    //StandardAndRobustFun();
    CFactory CFactorTest;
    COperationClass * pOperationNow = NULL;
    if (CFactorTest.GetAlgorithm("+", pOperationNow)) {
        int nComputerResult = 0;
        pOperationNow->GetValue(1, 2, nComputerResult);
        cout << nComputerResult << endl;
        delete(pOperationNow);
    }
    else {
        cout << "error" << endl;
    }
    getchar();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值