PHP设计模式——状态模式_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP设计模式——状态模式_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3067字,纯文字阅读大概需要5分钟。
内容图文
PHP设计模式——状态模式
状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
UML类图:
角色:
上下文环境(Work):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的具体对象来处理。
抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
具体状态(AmState):实现抽象状态定义的接口。
核心代码:
* User: Jang * Date: 2015/6/10 * Time: 10:34 */ //状态接口 interface IState { function WriteCode(Work $w); } //上午工作状态 class AmState implements IState { public function WriteCode(Work $w) { if($w->hour<=12) { echo 当前时间:{$w->hour}点,上午工作;犯困,午休。 ; } else { $w->SetState(new PmState()); $w->WriteCode(); } } } //下午工作状态 class PmState implements IState { public function WriteCode(Work $w) { if($w->hour<=17) { echo 当前时间:{$w->hour}点,下午工作状态还不错,继续努力。 ; } else { $w->SetState(new NightState()); $w->WriteCode(); } } } //晚上工作状态 class NightState implements IState { public function WriteCode(Work $w) { if($w->IsDone) { $w->SetState(new BreakState()); $w->WriteCode(); } else { if($w->hour<=21) { echo 当前时间:{$w->hour}点,加班哦,疲累至极。 ; } else { $w->SetState(new SleepState()); $w->WriteCode(); } } } } //休息状态 class BreakState implements IState { public function WriteCode(Work $w) { echo 当前时间:{$w->hour}点,下班回家了。 ; } } //睡眠状态 class SleepState implements IState { public function WriteCode(Work $w) { echo 当前时间:{$w->hour}点,不行了,睡着了。 ; } } //工作状态 class Work { private $current; public function Work() { $this->current = new AmState(); } public $hour; public $isDone; public function SetState(IState $s) { $this->current = $s; } public function WriteCode() { $this->current->WriteCode($this); } }
调用客户端测试代码:
//-------------------------状态模式------------------------- require_once ./State/State.php; $emergWork = new Work(); $emergWork->hour = 9; $emergWork->WriteCode(); $emergWork->hour = 10; $emergWork->WriteCode(); $emergWork->hour = 13; $emergWork->WriteCode(); $emergWork->hour=14; $emergWork->WriteCode(); $emergWork->hour = 17; $emergWork->WriteCode(); $emergWork->IsDone = true; $emergWork->IsDone = false; $emergWork->hour = 19; $emergWork->WriteCode(); $emergWork->hour = 22; $emergWork->WriteCode();
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
优点
1.状态模式将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
2.所有状态相关的代码都存在于某个ConcereteState中,所以通过定义新的子类很容易地增加新的状态和转换。
3.状态模式通过把各种状态转移逻辑分不到State的子类之间,来减少相互间的依赖。
缺点
导致较多的ConcreteState子类
欢迎关注我的视频课程,地址如下,谢谢。
PHP面向对象设计模式
http://www.bkjia.com/PHPjc/1015542.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1015542.htmlTechArticlePHP设计模式——状态模式 状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是...
内容总结
以上是互联网集市为您收集整理的PHP设计模式——状态模式_PHP教程全部内容,希望文章能够帮你解决PHP设计模式——状态模式_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。