博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式第十六章--状态模式
阅读量:7002 次
发布时间:2019-06-27

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

"; $context->state = new Concrete_state_B(); }}class Concrete_state_B extends State { public function handle(Context $context) { echo "NOW IS IN STATE_B
"; $context->state = new Concrete_state_A(); }}class Context { private $state; public function __construct(State $state) { $this->state = $state; } public function __get($param) { if ($param == 'state') { return $this->state; } } public function __set($param, $state) { if ($param == 'state') { $this->state = $state; } } public function request() { $this->state->handle($this); }}//CLIENT CODE$c = new Context(new Concrete_state_A());$c->request();$c->request();$c->request();$c->request();

 

状态模式:

  当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

  状态模式主要解决的问题是当控制一个对象状态转移的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

好处:

  将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

  通过定义新的子类可以很容易地增加新的状态和转换。

  状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。

转载于:https://www.cnblogs.com/wy0314/p/4776650.html

你可能感兴趣的文章
billing是如何的拆分的?
查看>>
Lua 迭代器与closure
查看>>
mybatis_helloworld(2)_源码
查看>>
完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
查看>>
BLE 广播数据解析
查看>>
Oracle用户密码过期和用户被锁解决方法【转】
查看>>
Android 解决Android的TextView和EditText换行问题
查看>>
CSS效果集锦(持续更新中)
查看>>
通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[中]:管道如何处理请求...
查看>>
Eigen教程(9)
查看>>
单元测试
查看>>
操作hadoop的经验积累
查看>>
微信企业号验证
查看>>
请问set JAVA_OPTS的各项參数是什么意思?
查看>>
Linux安装JDK
查看>>
C#常用控件缩写
查看>>
.NET足球赛事资料数据库平台SmartLottery开源发布——全球足球联赛应有尽有
查看>>
关于Eclipse生成和导入Patch文件.
查看>>
如何使用Photoshop(PS)将图片的底色变为透明
查看>>
IDEA实现序列号接口
查看>>