博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——状态模式(State)
阅读量:5014 次
发布时间:2019-06-12

本文共 2571 字,大约阅读时间需要 8 分钟。

  • 定义:允许一个对象在其状态改变时,改变它的行为。看起来对象似乎修改了它的类。
  • 解决根据不同的对象状态进行不同的操作的问题
  • UML

  • 代码示例:
    1 //==========================================  2 //Context.h  3 //==========================================  4 #pragma once  5   6 class State;  7 class Context  8 {  9 public: 10     Context(State* pState); 11     ~Context(); 12     void Request(); 13 private: 14     void UpdateState(State* pState); 15     friend class ConcreteStateA; 16     friend class ConcreteStateB; 17 private: 18     State* m_pState; 19 }; 20  21 //========================================== 22 //Context.cpp 23 //========================================== 24 #include "Context.h" 25 #include 
    26 #include "State.h" 27 28 Context::Context(State* pState) 29 :m_pState(pState) 30 { 31 } 32 33 Context::~Context() 34 { 35 delete m_pState; 36 } 37 38 void Context::Request() 39 { 40 if (NULL != m_pState) 41 { 42 m_pState->Handle(this); 43 } 44 } 45 46 void Context::UpdateState(State* pState) 47 { 48 delete m_pState; 49 m_pState = pState; 50 } 51 52 //========================================== 53 //State.h 54 //========================================== 55 #pragma once 56 57 class Context; 58 class State 59 { 60 public: 61 virtual ~State(){} 62 virtual void Handle(Context* pContex) = 0; 63 }; 64 65 class ConcreteStateA : public State 66 { 67 public: 68 void Handle(Context* pContex); 69 }; 70 71 class ConcreteStateB : public State 72 { 73 public: 74 void Handle(Context* pContex); 75 }; 76 77 //========================================== 78 //State.cpp 79 //========================================== 80 #include "State.h" 81 #include
    82 #include "Context.h" 83 using namespace std; 84 85 //处理、更新状态 86 void ConcreteStateA::Handle(Context* pContex) 87 { 88 cout<<"ConcreteStateA :: Handle"<
    UpdateState(new ConcreteStateB); 90 } 91 92 void ConcreteStateB::Handle(Context* pContex) 93 { 94 cout<<"ConcreteStateB :: Handle"<
    UpdateState(new ConcreteStateA); 96 } 97 98 //========================================== 99 //main.cpp100 //==========================================101 #include "Context.h"102 #include "State.h"103 104 int main()105 {106 State *pState = new ConcreteStateA();107 Context *pContext = new Context(pState);108 pContext->Request();109 pContext->Request();110 pContext->Request();111 112 delete pContext;113 114 return 0;115 }

转载于:https://www.cnblogs.com/dahai/archive/2013/01/04/2843860.html

你可能感兴趣的文章
python多个装饰器的执行顺序
查看>>
岗顶-一图一世界
查看>>
一步步构造自己的vue2.0+webpack环境
查看>>
分页类
查看>>
Python装饰器的个人小理解
查看>>
为什么百万医疗险越来越多,到底选哪款?
查看>>
如何检测 51单片机IO口的下降沿
查看>>
扫描识别控件Dynamic .NET TWAIN使用教程:如何将事件添加到应用程序中
查看>>
创建和修改主键 (SQL)
查看>>
2018-2019 ICPC, NEERC, Southern Subregional Contest(训练记录)
查看>>
20145233 《信息安全系统设计基础》第7周学习总结
查看>>
linux设备驱动程序第3版学习笔记(例程2--hellop.c)
查看>>
玩转storm
查看>>
第10章 使用Apache服务部署静态网站
查看>>
关于给予webApp框架的开发工具
查看>>
c语言编写的生成泊松分布随机数
查看>>
Maven入门笔记
查看>>
iOS webView的常见属性和方法
查看>>
理解position:relative
查看>>
Codeforces Round #344 (Div. 2) Messager KMP的应用
查看>>