23种设计模式C++实例之状态模式

#include <iostream>

using namespace std;

/*
 * 状态模式
 * */

class Worker;
class State;
class StateOne;
class StateTwo;

class Worker {
    public:
        Worker();
        ~Worker();
        void dothing();
        int getHour() {
            return hour;
        }
        void setHour(int hour) {
            this->hour = hour;
        }
        State* getCurState() {
            return state;
        }
        void setState(State* state) {
            this->state = state;
        }
    private:
        int hour;
        State* state;
};

class State {
    public:
        virtual ~State() {}
        virtual void dothing(Worker* worker) = 0;
};

class StateOne: public State {
    public:
        virtual void dothing(Worker* worker);
};

class StateTwo: public State {
    public:
        virtual void dothing(Worker* worker); 
};

void StateOne::dothing(Worker* worker) {
    int h = worker->getHour();
    if (h == 7 || h == 8) {
        cout << "eat" << endl; 
    } else {
        delete worker->getCurState();
        worker->setState(new StateTwo);
        worker->getCurState()->dothing(worker); 
    }
}

void StateTwo::dothing(Worker* worker) {
    int h = worker->getHour();
    if (h >= 9) {
        cout << "work" << endl; 
    } else {
        delete worker->getCurState();
        worker->setState(new StateTwo);
        worker->getCurState()->dothing(worker); 
    }
}

Worker::Worker() {
    state = new StateOne;
}

Worker::~Worker() {
    if (state != NULL){
        delete state;
        state = NULL;
    }
}

void Worker::dothing() {
    state->dothing(this);
}

int main() {
    Worker* w = new Worker;
    w->setHour(7);
    w->dothing();

    w->setHour(10);
    w->dothing();

    delete w;

    return 0;
}

GOF设计模式C++实例:

目 录 0 引言..............................................................................................................................................2 0.1 设计模式解析(总序).....................................................................................................2 0.2 设计模式解析后记.............................................................................................................2 0.3 与作者联系........................................................................................................................5 1 创建型模式...................................................................................................................................5 1.1 Factory模式 ........................................................................................................................5 1.2 AbstactFactory模式 .......................................................................................................... 11 1.3 Singleton模式...................................................................................................................16 1.4 Builder模式.......................................................................................................................18 1.5 Prototype模式...................................................................................................................23 2 结构型模式.................................................................................................................................26 2.1 Bridge模式........................................................................................................................26 2.2 Adapter模式......................................................................................................................31 2.3 Decorator模式...................................................................................................................35 2.4 Composite模式.................................................................................................................40 2.5 Flyweight模式 ..................................................................................................................44 2.6 Facade模式.......................................................................................................................49 2.7 Proxy模式.........................................................................................................................52 3 行为模式.....................................................................................................................................55 3.1 Template模式....................................................................................................................55 3.2 Strategy模式 .....................................................................................................................59 3.3 State模式...........................................................................................................................63 3.4 Observer模式....................................................................................................................68 3.5 Memento模式...................................................................................................................73 3.6 Mediator模式....................................................................................................................76 3.7 Command模式..................................................................................................................81 3.8 Visitor模式........................................................................................................................87 3.9 Chain of Responsibility模式.............................................................................................92 3.10 Iterator模式.....................................................................................................................96 3.11 Interpreter模式..............................................................................................................100 4 说明 .........................................................................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值