设计模式(二)策略模式

设计模式(二)策略模式

单纯策略模式:

#include <iostream>
using namespace std;

//策略基类
class COperation{
public:
    int m_iFirst;
    int m_iSecond;

    virtual double GetResult(){
        double dResult = 0;
        return dResult;
    }
};

//策略具体类—加法类
class AddOperation : public COperation{
public:

    AddOperation(int a, int b){
        m_iFirst=a;
        m_iSecond=b;
    }

    virtual double GetResult(){
        return m_iFirst + m_iSecond;
    }
};

class Context{
    COperation *m_op;
public:
    Context(COperation *temp){
        m_op = temp;
    }

    double GetResult(){
        return m_op->GetResult();
    }
};

//客户端
int main(){
    int a, b;
    char c;
    cin >> a >> b;
    cout << "请输入运算符:";
    cin >> c;
    switch(c){
    case '+':
        Context *context = new Context(new AddOperation(a, b));
        cout << context->GetResult() << endl;
        break;
    }
    return 0;
}

策略模式跟工厂模式结合:

#include <iostream>
using namespace std;

class COperation{
public:
    int m_nFirst;
    int m_nSecond;
    virtual double GetResult(){
        double dResult=0;
        return dResult;
    }
};

//策略具体类—加法类
class AddOperation : public COperation{
public:
    AddOperation(int a,int b){
        m_nFirst=a;
        m_nSecond=b;
    }
    virtual double GetResult(){
        return m_nFirst+m_nSecond;
    }
};

class Context{
private:
    COperation* op;
public:
    Context(char cType){
        switch (cType){
        case '+':
            op=new AddOperation(3,8);
            break;
        }
    }
    double GetResult(){
        return op->GetResult();
    }
};
//客户端
int main(){
    Context *test=new Context('+');
    cout<<test->GetResult()<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值