PHP状态模式

####状态设计模式

  • 状态模式的作用是允许对象在状态改变时改变其行为

  • 对象中频繁的状态非常依赖于条件语句,就自身来说条件语句并没有什么问题,不过,如果选项太多,以至于程序出现混乱,或者增加或改变选项需要太多的是时间。

    <?php /** * Created by PhpStorm. * User: gewenrui * Date: 16/3/12 * Time: 下午3:57 */ header("Content-type: text/html; charset=utf-8"); class Context{ private $offState; private $onState; private $brighterState; private $brightestState; private $currentState; public function __construct() { $this->offState = new OffState($this); $this->onState = new Onstate($this); $this->brighterState = new BrighterState($this); $this->brightestState = new BrightestState($this); $this->currentState = $this->offState; } public function turnOnLight(){ $this->currentState->turnLightOn(); } public function turnOffLight(){ $this->currentState->turnLightOff(); } public function turnBrighter(){ $this->currentState->turnBrighter(); } public function turnBrightest(){ $this->currentState->turnBrightest(); } public function setState(IState $state){ $this->currentState = $state; } public function getOnState(){ return $this->onState; } public function getOffState(){ return $this->offState; } public function getBrighterState(){ return $this->brighterState; } public function getBrightestState(){ return $this->brightestState; } } interface IState{ public function turnLightOn(); public function turnLightOff(); public function turnBrighter(); public function turnBrightest(); } class Onstate implements IState{ private $context; public function __construct(Context $contextNew) { $this->context = $contextNew; } public function turnLightOff() { echo "Lights off"."</br>"; $this->context->setState($this->context->getOffState()); } public function turnLightOn() { echo "Light is already on there is no action"."</br>"; } public function turnBrighter() { echo "turn 明亮"."</br>"; } public function turnBrightest() { echo "turn 最亮"."</br>"; } } class OffState implements IState{ private $context; public function __construct(Context $contextNew) { $this->context = $contextNew; } public function turnLightOn() { echo "Lights On Now i can see"."</br>"; $this->context->setState($this->context->getOnState()); } public function turnLightOff() { echo "Light is already off"."</br>"; } public function turnBrightest() { echo "turn 最亮"."</br>"; } public function turnBrighter() { echo "turn 较亮"."</br>"; } } class BrighterState implements IState{ private $context; public function __construct(Context $contextNow) { $this->context = $contextNow; } public function turnBrighter() { echo "变暗了"; } public function turnBrightest() { $this->context->setState($this->context->getBrighterState()); } public function turnLightOff() { echo "关灯了"; } public function turnLightOn() { echo "灯是亮的"; } } class BrightestState implements IState{ private $context; public function __construct(Context $contextNow) { $this->context = $contextNow; } public function turnLightOff() { $this->context->setState($this->context->getOffState()); } public function turnBrightest() { echo "this is brightest"."</br>"; } public function turnBrighter() { echo "this is a little 暗淡"."</br>"; } public function turnLightOn() { echo "there is no use"."</br>"; } } class Client{ private $context; public function __construct() { $this->context = new Context(); $this->context->turnOnLight(); $this->context->turnOnLight(); $this->context->turnOffLight(); $this->context->turnOffLight(); $this->context->turnOnLight(); $this->context->turnBrighter(); $this->context->turnBrightest(); $this->context->turnOffLight(); } } $data = new Client();
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )