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类图:

posted @   tai君  阅读(446)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示