栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式C++实现

//实现计算器类
//普通写法
class Calculator{
public:
    int getResult(string oper){
        if(oper=="+"){
            return m_Num1 + m_Num2;
        }
        else if(oper=="-"){
            return m_Num1 - m_Num2;
        }
        else if(oper=="*"){
            return m_Num1 * m_Num2;
        }
        //如果想扩展新的功能,需要修改源码
        //提倡 开闭原则:对扩展进行开放,对修改进行关闭

        return 0;
    }
    
    int m_Num1;
    int m_Num2;
};

void test09(){
    Calculator c;
    c.m_Num1 = 10;
    c.m_Num2 = 20;
    cout<m_Num1 = 10;
    abc->m_Num2 = 20;
    coutm_Num1 = 10;
    abc->m_Num2 = 20;
    coutm_Num1 = 10;
    abc->m_Num2 = 20;
    cout可读性强
//有利于扩展和 维护性

//【之前都是要自己创建对象】
//运算类工厂,
//传入参数,【让工厂去创建相应对象】
//不符合开闭原则,每增加一个运算,都得修改下列代码
class OperationFactory{
public:
    static AbstractCalculator* createCalculator(string operate){
        AbstractCalculator* abc = NULL;
        //父类指针指向子类对象
        if(operate=="+"){
            abc = new AddCalculator;
        }
        else if(operate=="-"){
            abc = new SubCalculator;
        }
        else if(operate=="*"){
            abc = new MulCalculator;
        }
        return abc;
    }
};

//客户端代码,不需要关心对象的创建过程
//由一个工厂生成所有对象:加法计算器/减法计算器/乘法计算器
void test11(){
    AbstractCalculator * abc = NULL;
    OperationFactory* factory = new OperationFactory; //指向工厂的指针
    
    //不需要关心对象的创建过程
    //只要输入运算符号,工厂就能实例化出合适的对象
    abc = factory->createCalculator("+");
    abc->m_Num1 = 10;
    abc->m_Num2 = 20;
    coutcreateCalculator("-");
    abc->m_Num1 = 10;
    abc->m_Num2 = 20;
    coutcreateCalculator("*");
    abc->m_Num1 = 10;
    abc->m_Num2 = 20;
    cout 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号