状态模式就是将状态的条件判断语句转化成其函数重写形式,利用了面向对象语言的多态性,本文根据https://blog.csdn.net/lm324114/article/details/78819602的情景将状态模式用Matlab语言实现。

根据上图情景,用传统的方法实现如下:

RoomState.m

classdef RoomState < handleenumerationFREE BOOKED CHECKIN end
end   

IfRoom.m

classdef IfRoom < handlepropertiesstate;endmethodsfunction obj = IfRoom()obj.state = RoomState.FREE;endfunction bookRoom(obj)switch obj.statecase RoomState.FREEdisp('完成预订...');obj.state = RoomState.BOOKED;case RoomState.BOOKEDdisp('该房间已经被预订了...');case RoomState.CHECKINdisp('该房间已经有人入住了...');endendfunction checkInRoom(obj)switch obj.statecase RoomState.FREEdisp('空闲房间,入住..');obj.state = RoomState.CHECKIN;case RoomState.BOOKEDdisp('入住房间....');obj.state = RoomState.CHECKIN;case RoomState.CHECKINdisp('该房间已经有人入住了...');endendfunction unsubscribeRoom(obj)switch obj.statecase RoomState.FREEdisp('该房间尚未预订');case RoomState.BOOKEDdisp('已退订房间...');obj.state = RoomState.FREE;case RoomState.CHECKINdisp('该房间已入住,不能退订');endendfunction checkOutRoom(obj)switch obj.statecase {RoomState.FREE, RoomState.BOOKED}disp('该房间尚未入住');case RoomState.CHECKINdisp('已退房');obj.state = RoomState.FREE;endendend
end

测试代码:

ri = IfRoom();
ri.bookRoom();
ri.checkOutRoom();
ri.unsubscribeRoom();
ri.checkInRoom();
ri.checkOutRoom();

用状态模式实现如下:

State.m

classdef State < handle    propertiesstate;endmethods(Abstract)     bookRoom(obj);     checkInRoom(obj)     unsubscribeRoom(obj)      checkOutRoom(obj)       end
end

FreeState.m

classdef FreeState < Statepropertiesroomend    methodsfunction obj = FreeState(room)obj.room = room;endfunction bookRoom(obj)disp('完成预订...');obj.room.state = obj.room.BOOKED_STATE;endfunction checkInRoom(obj)disp('空闲房间,入住..');obj.room.state = obj.room.CHECKIN_STATE;endfunction unsubscribeRoom(~)disp('该房间尚未预订');                  endfunction checkOutRoom(~)         disp('该房间尚未入住');endend
end

BookedState.m

classdef BookedState < Statepropertiesroomend    methodsfunction obj = BookedState(room)obj.room = room;endfunction bookRoom(~)           disp('该房间已经被预订了...');endfunction checkInRoom(obj)disp('入住房间....');obj.room.state = obj.room.CHECKIN_STATE;endfunction unsubscribeRoom(obj)disp('已退订房间...');obj.room.state = obj.room.FREE_STATE;                  endfunction checkOutRoom(~)         disp('该房间尚未入住');endend
end

CheckInState.m

classdef CheckInState < Statepropertiesroomend    methodsfunction obj = CheckInState(room)obj.room = room;endfunction bookRoom(~)disp('该房间已经有人入住了...');endfunction checkInRoom(~)disp('该房间已经有人入住了...');endfunction unsubscribeRoom(~)disp('该房间已入住,不能退订');                  endfunction checkOutRoom(obj)         disp('已退房');obj.room.state = obj.room.FREE_STATE;endend
end

Room.m

classdef Room < handlepropertiesFREE_STATE;BOOKED_STATE;CHECKIN_STATE;endpropertiesstate;endmethodsfunction obj = Room()obj.FREE_STATE = FreeState(obj);obj.BOOKED_STATE = BookedState(obj);obj.CHECKIN_STATE = CheckInState(obj);obj.state = obj.FREE_STATE;endfunction bookRoom(obj)obj.state.bookRoom();endfunction checkInRoom(obj)obj.state.checkInRoom();endfunction unsubscribeRoom(obj)obj.state.unsubscribeRoom();                endfunction checkOutRoom(obj)         obj.state.checkOutRoom();endend
end

测试代码:

r = Room();
r.bookRoom();
r.checkOutRoom();
r.unsubscribeRoom();
r.checkInRoom();
r.checkOutRoom();

运行结果:

可以看出,两种方式的运行结果是一致的,但是状态模式比传统方法看上去更简洁。

Matlab状态模式(State)相关推荐

  1. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...

  2. c++状态模式state

    c++状态模式state 概念 角色和职责 案例 概念 State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样 ...

  3. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  4. 状态模式(State)-七十二变

    状态模式(State)-老孙七十二变 俺老孙来也-我是如来佛祖玉皇大帝观音菩萨指定取西经特派使者花果山水帘洞美猴王齐天大圣孙悟空啊!老孙的必杀技就是七十二变,没错比老外的变相怪杰还有牛逼许多. 关于老 ...

  5. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)

    说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对"状态模式"并不陌生,因为我们之前使用到了状态模式进行 ...

  7. 《研磨设计模式》chap18 状态模式state(1)模式简介

    场景:投票管理 1. 正常编码 //投票管理 public class VoteManager {//记录用户投票的结果,Map<String,String>对应Map<用户名称,投 ...

  8. 读书笔记_java设计模式深入研究 第八章 状态模式 State

    1,状态模式:事务有n个状态,且维护状态变化. 2,UML模型: -1,上下文环境Context:定义客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete   ...

  9. C++设计模式--状态模式(state)

    概述 前面文章介绍了代理模式(在这里),代理模式和状态模式都提供一个代理类,从结构上看,可以认为代理模式只是状态模式的一个特例,不同之处在于,代理模式控制对其实现类的访问,而状态模式动态地改变其实现类 ...

最新文章

  1. 第十五届全国大学生智能汽车竞赛赛道拼装图
  2. 浏览器history操作实现一些功能
  3. win32汇编获取当前进程ID和可执行文件名
  4. Nginx在Windows系统和Linux系统下的重启
  5. php tp5 redis的使用(亲测)
  6. Linux的Nginx六:源码|安装
  7. 遍历同辈节电的方法_JQuery遍历DOM节点的方法
  8. 【做题记录】DP 杂题
  9. mysql .pdb是什么文件_计算广告算法到底要做什么?
  10. 大学计算机实验报告2,大学计算机基础实验报告2.doc
  11. 商业 - 讲座: O2O模式
  12. MatConvNet安装问题
  13. 基于onnxruntime的YOLOv5单张图片检测实现
  14. 多线程抢票_多线程抢票系统浅析
  15. 浅淡静态代码分析工具
  16. python 中文排序(按拼音首字母)
  17. IMX6q ft5x0x_ts触摸芯片分析
  18. 龙格现象 图像对比及Python代码实现
  19. w3school SQL教程整理
  20. CG CTF MISC 丘比龙De女神

热门文章

  1. 图片转DATA:URI工具
  2. 第一章 分布式计算概述
  3. drools规则引擎动态配置规则
  4. 国内免费的ChatGPT可用网址汇总【持续更新5.7】
  5. 快速将图片背景去掉教程
  6. 【HBase】HBase phoenix 安装使用
  7. Cannot resolve MVC View ‘XXX‘问题解决(路径跳转不过去)
  8. 深入理解什么是LSM-Tree
  9. Linux内核版本和发行版本的区别
  10. 一文了解linux 网络协议栈(链路层)