state模式

编译都没过,发生点事,心有点乱

随便看看就好

state.h

#ifndef _STATE_H

#define _STATE_H

#include <iostream>

using namespace std;

class Context

{

public:

Context() {

}

Context(State* state) : _state(state) {

}

~Context() {

}

void OperationInterface() {

_state->OperationInterface(this);

}

void OperationChangeState() {

_state->OperationChangeState(this);

}

private:

friend class State;

bool ChangeState(State* state) {

_state = state;

return true;

}

private:

State* _state;

};

class State

{

public:

State() {

}

virtual ~State() {

}

virtual void OperationInterface(Context *)=0;

virtual void OperationChangeState(Context *)=0;

protected:

bool ChangeState(Context* con,State* st) {

con->ChangeState(st);

return true;

}

};

class ConcreteStateA : public State

{

public:

ConcreteStateA() {

}

virtual ~ConcreteStateA() {

}

virtual void OperationInterface(Context*) {

cout << "ConcreteStateA:OperationInterface" << endl;

}

virtual void OperationChangeState(Context* con) {

OperationInterface(con);

ChangeState(con, new ConcreteStateB());

}

};

class ConcreteStateB : public State

{

public:

ConcreteStateB() {

}

virtual ~ConcreteStateB() {

}

virtual void OperationInterface(Context*) {

cout << "ConcreteStateB:OperationInterface" << endl;

}

virtual void OperationChangeState(Context* con) {

OperationInterface(con);

ChangeState(con, new ConcreteStateA());

}

};

#endif // _STATE_H

state.cpp

#include "state.h"

int main()

{

State* st = new ConcreteStateA();

Context* con = new Context(st);

con->OperationInterface();

con->OperationInterface();

con->OperationInterface();

return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 建议下载pdf附件。 l Factory Method****(工厂方法)****** 意图:**** 定义一...
    诵之思之阅读 280评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 文章内容参考自《Head First设计模式》的状态模式这一节。 一、state模式 定义: 状态模式允许对象在内...
    凌绝少爷阅读 1,613评论 0 3
  • 摄计魔士大法师不仅炼丹,也练功。他有一种独门法术,修女不修男,需要和弟子在密室成双修炼,以获通灵之神丹。在整个修炼...
    離枝阅读 643评论 4 1
  • 1.早睡是一种习惯 2.微笑是一种思维 3.整洁是一种态度 4.运动是一种精神 5.旅行是一种享受 6.阅读是一种...
    无处安放的灵魂1阅读 160评论 0 0