Java状态模式电梯例子_设计模式C++实现—State状态模式(对象行为型)

本文通过电梯的例子介绍了Java状态模式,并展示了如何使用C++实现这一模式。文章通过环境类、抽象状态类和具体状态类的定义,展示了如何允许对象在内部状态改变时改变其行为。代码示例比较了使用状态模式前后的实现方式,强调了模式在处理状态变化逻辑时的优势。
摘要由CSDN通过智能技术生成

a4c26d1e5885305701be709a3d33442f.png

6.模式的组成

环境类(Context):

定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态。

抽象状态类(State):定义一个接口以封装与Context的一个特定状态相关的行为。

具体状态类(ConcreteState):每一子类实现一个与Context的一个状态相关的行为。

7. 实例

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

main(),客户

CLiftState,电梯状态抽象类

CCloseingState,电梯门关闭

COpenningState,电梯门打开

CRunningState,电梯运行

CStoppingState,电梯停止

CContext,电梯的控制面板

说明:CContext保持电梯的状态,并提供操作的接口函数。当函数被调用时,CContext直接调用当前状态的相应函数。由状态的接口函数来确定是否可以执行这个动作,以及修改状态为执行这个动作后的状态。

看代码:第一块是不使用模式的做法,第二块是使用模式的做法,在main()函数里会有调用的方式。

//ILift.h

#pragma once

class ILift

{

public:

ILift(void)

{

}

virtual

~ILift(void)

{

}

static

const int OPENING_STATE = 1;

static

const int CLOSING_STATE = 2;

static

const int RUNNING_STATE = 3;

static

const int STOPPING_STATE = 4;

virtual

void SetState(int state) = 0;

virtual

void Open() = 0;

virtual

void Close() = 0;

virtual

void Run() = 0;

virtual

void Stop() = 0;

};

//Lift.h

#pragma once

#include "ilift.h"

class CLift :

public

ILift

{

public:

CLift(void);

~CLift(void);

void

SetState(int state);

void

Open();

void

Close();

void

Run();

void

Stop();

private:

int

m_state;

void

OpenWithoutLogic();

void

CloseWithoutLogic();

void

RunWithoutLogic();

void

StopWithoutLogic();

};

//Lift.cpp

#include "StdAfx.h"

#include "Lift.h"

#include

using std::cout;

using std::endl;

CLift::CLift(void)

{

this->m_state = 0;

}

CLift::~CLift(void)

{

}

void CLift::SetState(int

state)

{

this->m_state = state;

}

void CLift::Open()

{

switch(this->m_state)

{

case

OPENING_STATE:

break;

case

CLOSING_STATE:

this->OpenWithoutLogic();

this->SetState(OPENING_STATE);

break;

case

RUNNING_STATE:

break;

case

STOPPING_STATE:

this->OpenWithoutLogic();

this->SetState(OPENING_STATE);

break;

}

}

void CLift::Close()

{

<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值