strategy 策略模式

来源:互联网 发布:java中九九乘法表 编辑:程序博客网 时间:2024/05/21 02:49
#include <iostream>using namespace std;class travel{public:    virtual void travel_method() = 0;    virtual ~travel(){}};class travel_with_plane:public travel{public:    void travel_method(){        cout<<"travel_with_plane"<<endl;    }    ~travel_with_plane()    {        cout<<"travel_with_plane::~travel_with_plane()"<<endl;    }};class travel_with_train : public travel{public:    void travel_method(){        cout<<"travel_with_train"<<endl;    }    ~travel_with_train()    {        cout<<"travel_with_train::~travel_with_train()"<<endl;    }};class person{public:    person():ptra(NULL)    {        }    void set_travel(travel * tra){        if(ptra != NULL){            delete ptra;            ptra = NULL;        }        ptra = tra;    }    void go_travel(){        if(ptra != NULL)            ptra->travel_method();    }    ~person(){        if(ptra != NULL)            delete ptra;    }private:    travel * ptra;};int main(){    person per;    per.set_travel(new travel_with_plane);    per.go_travel();    per.set_travel(new travel_with_train);    per.go_travel();    return 0;}//////////////////////////////////////#include <iostream>#include <string>#include <cstring>using namespace std;class Operation{public:    virtual ~Operation(){}    virtual double operate() = 0;    void setNum1(double value){ m_fNum1 = value; }    void setNum2(double value){ m_fNum2 = value; }protected:    double m_fNum1;    double m_fNum2;};class AddOperation : public Operation{public:    double operate()    {        return m_fNum1 + m_fNum2;    }};class SubOperation : public Operation{public:    double operate()    {        return m_fNum1 - m_fNum2;    }};class MultiOperation : public Operation{public:    double operate()    {        return m_fNum1 * m_fNum2;    }};class DivOperation : public Operation{public:    double operate()    {        if (m_fNum2 < 0.000001)        {            cout<< "除数不能为零!" <<endl;            return 0;        }        return m_fNum1 / m_fNum2;    }}; class OperationContext{public:    OperationContext(char c)    {        switch(c)        {        case '+':            m_pOperation = new AddOperation();            break;        case '-':            m_pOperation = new SubOperation();            break;        case '*':            m_pOperation = new MultiOperation();            break;        case '/':            m_pOperation = new DivOperation();            break;        default:            break;        }    }    double GetResult(double num1, double num2)    {        m_pOperation->setNum1(num1);        m_pOperation->setNum2(num2);        return m_pOperation->operate();    }    ~OperationContext()    {        delete m_pOperation;    }private:    Operation *m_pOperation;};int main(){    OperationContext oContext('-');    cout<<oContext.GetResult(99, 773)<<endl;;    OperationContext oContext1('*');    cout<<oContext1.GetResult(99, 773)<<endl;;    return 0;}

0 0