php实现设计模式之 状态模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | <?php /*状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。(行为模式) * * 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态, * 这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。 * 当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 * * * 三要素:1 抽象状态接口,所有具体状态实现此接口。 * 2: 具体状态,有几个状态就有几个类,分别代表不同的状态 * 3 环境类,就是具体的事物,此例中的电灯。必须包含一个状态实例 * */ /* * 以电灯为例:电灯对象本身有两个状态,开/关, 一个行为:按下开关。 * 当电灯的状态为开时,按下开关,表现为关灯;当电灯的状态为关时,按下开关,表现为开灯;典型的状态改变时,改变了开关的行为 * */ //抽象状态接口 interface state{ public function show(); //展示当前状态 public function handle( $light ); //当前状态改变时,设置电灯的下一个状态,操作对象电灯 } //电灯的两个具体状态 class onstate implements state{ public function show(){ echo '是开灯状态' ; } public function handle( $light ){ $light ->set( new offstate()); } } class offstate implements state{ public function show(){ echo '是关灯状态' ; } public function handle( $light ){ $light ->set( new onstate()); } } //环境类,电灯。状态state 行为puton class light{ public $state ; public function set(state $state ){ //设置电灯的状态 $this ->state = $state ; } public function puton(){ //行为 echo '电灯初始状态:' ; $this ->state->show(); $this ->state->handle( $this ); echo "<br/>" ; echo '按下开关之后:' ; $this ->state->show(); } } //实例化一个电灯,设置初始状态为开 $m = new light(); $m ->set( new onstate()); //按下开关 $m ->puton(); echo "<br/>" ; echo '--------------------------------' ; echo "<br/>" ; $m ->puton(); ?> |
UML类图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!