State模式C++实现

作用:

允许一个对象在其内部状态改变时改变它的行为.



UML结构图:

State模式C++实现



解析:

State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和Strategy模式在图示上有很多相似的地方,需要说明的是两者的思想都是一致的,只不过封装的东西不同:State模式封装的是不同的状态,而Stategy模式封装的是不同的算法.



实现:

1)State.h

State模式C++实现State模式C++实现/*********

State模式C++实现 created: 2006/08/05

State模式C++实现 filename: State.h

State模式C++实现 author: 李创

State模式C++实现http://www.cppblog.com/converse/

State模式C++实现

State模式C++实现 purpose: State模式的演示代码

State模式C++实现
**********/

State模式C++实现

State模式C++实现#ifndef STATE_H

State模式C++实现
#defineSTATE_H

State模式C++实现

State模式C++实现
classState;

State模式C++实现

State模式C++实现
classContext

State模式C++实现State模式C++实现
{

State模式C++实现
public:

State模式C++实现 Context(State
pState);

State模式C++实现
~Context();

State模式C++实现
voidRequest();

State模式C++实现
voidChangeState(State
pState);

State模式C++实现

State模式C++实现
private:

State模式C++实现 State
m_pState;

State模式C++实现}
;

State模式C++实现

State模式C++实现
classState

State模式C++实现State模式C++实现
{

State模式C++实现
public:

State模式C++实现State模式C++实现
virtual~State(){}

State模式C++实现

State模式C++实现
virtualvoidHandle(Context
pContext)=0;

State模式C++实现}
;

State模式C++实现

State模式C++实现
classConcreateStateA

State模式C++实现 :
publicState

State模式C++实现State模式C++实现
{

State模式C++实现
public:

State模式C++实现
voidHandle(ContextpContext);

State模式C++实现}
;

State模式C++实现

State模式C++实现
classConcreateStateB

State模式C++实现 :
publicState

State模式C++实现State模式C++实现
{

State模式C++实现
public:

State模式C++实现
voidHandle(Context
pContext);

State模式C++实现}
;

State模式C++实现

State模式C++实现
#endif

State模式C++实现


2)State.cpp

State模式C++实现State模式C++实现
//*********

State模式C++实现 created: 2006/08/05

State模式C++实现 filename: State.cpp

State模式C++实现 author: 李创

State模式C++实现
http://www.cppblog.com/converse/

State模式C++实现

State模式C++实现 purpose: State模式的演示代码

State模式C++实现
*********/

State模式C++实现

State模式C++实现#include
"State.h"

State模式C++实现#include
<iostream>

State模式C++实现

State模式C++实现Context::Context(State
pState)

State模式C++实现 : m_pState(pState)

State模式C++实现State模式C++实现
{

State模式C++实现

State模式C++实现}


State模式C++实现

State模式C++实现Context::
~Context()

State模式C++实现State模式C++实现
{

State模式C++实现 delete m_pState;

State模式C++实现 m_pState
=NULL;

State模式C++实现}


State模式C++实现

State模式C++实现
voidContext::Request()

State模式C++实现State模式C++实现
{

State模式C++实现
if(NULL!=m_pState)

State模式C++实现State模式C++实现
{

State模式C++实现 m_pState
->Handle(this);

State模式C++实现 }


State模式C++实现}


State模式C++实现

State模式C++实现
voidContext::ChangeState(State
pState)

State模式C++实现State模式C++实现
{

State模式C++实现
if(NULL!=m_pState)

State模式C++实现State模式C++实现
{

State模式C++实现 delete m_pState;

State模式C++实现 m_pState
=NULL;

State模式C++实现 }


State模式C++实现

State模式C++实现 m_pState
=pState;

State模式C++实现}


State模式C++实现

State模式C++实现
voidConcreateStateA::Handle(ContextpContext)

State模式C++实现State模式C++实现
{

State模式C++实现 std::cout
<<"Handle by ConcreateStateAn";

State模式C++实现

State模式C++实现
if(NULL!=pContext)

State模式C++实现State模式C++实现
{

State模式C++实现 pContext
->ChangeState(newConcreateStateB());

State模式C++实现 }


State模式C++实现}


State模式C++实现

State模式C++实现
voidConcreateStateB::Handle(Context
pContext)

State模式C++实现State模式C++实现
{

State模式C++实现 std::cout
<<"Handle by ConcreateStateBn";

State模式C++实现

State模式C++实现
if(NULL!=pContext)

State模式C++实现State模式C++实现
{

State模式C++实现 pContext
->ChangeState(newConcreateStateA());

State模式C++实现 }


State模式C++实现}


State模式C++实现


3)Main.cpp

State模式C++实现State模式C++实现/
*********

State模式C++实现 created: 2006/08/05

State模式C++实现 filename: Main.cpp

State模式C++实现 author: 李创

State模式C++实现http://www.cppblog.com/converse/

State模式C++实现

State模式C++实现 purpose: State模式的测试代码

State模式C++实现
**********/

State模式C++实现

State模式C++实现#include
"State.h"

State模式C++实现

State模式C++实现
intmain()

State模式C++实现State模式C++实现
{

State模式C++实现 State
pState=newConcreateStateA();

State模式C++实现 Context
pContext=newContext(pState);

State模式C++实现 pContext
->Request();

State模式C++实现 pContext
->Request();

State模式C++实现 pContext
->Request();

State模式C++实现

State模式C++实现 delete pContext;

State模式C++实现

State模式C++实现
return0;

State模式C++实现}


原文链接: https://www.cnblogs.com/weiqubo/archive/2011/01/10/1931575.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/19903

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午9:15
下一篇 2023年2月7日 下午9:15

相关推荐