在现实中,对象的表现往往不是固定的,而是随时间或者环境而变化的,大到人随时间而变老,小到心情随着天气而喜怒哀乐。这时候,对象的状态随着某些因素而发生改变,行为也跟着随之改变,如同雨夜(因素)容易使人伤感(状态)而买醉(行为)。

当一个对象的行为取决于其状态,并且它必须在运行时根据时间状态改变其行为时,我们就能使用状态模式来实现,从而消除大量的switch分支判断。

首先,定义这个行为取决于状态的对象,这里以天气为对象,展示天气在你喜欢的那个她的状态的影响下的改变

class weather{// 影响状态的因素public $you;//状态public $state;//初始化环境参数和所处状态public function __construct($e,$s){$this->you=$e;$this->state=$s;}//设置状态public function setState(state $s){$this->state=$s;}//设置环境因素public function setEnvironment($t){$this->you=$t;}//行为public function motion(){$this->state->yourstate($this);}
}
接下来定义一个抽象的状态类,类中定义了一个状态所对应的行为:
     abstract class state{abstract function yourState(weather $weacher);}

然后定义具体状态:

class state1 extends state {function yourState(weather $weather){//判断环境和当前状态是否匹配if('安好' == $weather->you){echo "便是晴天";}else{//不匹配则将flower状态设置为下一状态,并调用motion再次执行该流程$weather->setState(new state2());$weather->motion();}}
}
class state2 extends state {function yourState(weather $weather){if('不安好'==$weather->you){echo "便是阴天<br>";}else{$weather->setState(new state1());$weather->motion();}}
}

到目前为止,来看看我们已经定义的东西
weather:行为取决于状态的类
state:抽象状态类
state1,state2:具体状体类
好了,接下来就可以在我们的客户端来使用状态模式了

//假设'你'是'安好'的,初始状态为state1
$obj=new weather('安好',new state1());
//在当前状态下发生行为,天气会是晴天
$obj->motion();
//改变当前环境
$obj->you='不安好';
//再调用行为方法,此时对象的状态会发生变化,使行为发生变化,天气会是阴天
$obj->motion();

总结
可以看出,当我们需要添加新的状态时,只需要定义新的具体状态类即可。相比利用swtich分支对环境因素作出判断从而选择不同的行为,显然状态模式很好地体现了开放封闭原则。

状态模式——你若安好,便是晴天相关推荐

  1. 2016/7/4日-你若安好,便是晴天.

    你若安好,便是晴天.最近徘徊在思考人生定位的问题上,昨晚网吧通宵将自己的精神精力耗尽,让自己处在一种虚脱的状态,有的时候很享受这种孤独(丁克).大学最后一科考试前周结束了,幸好没挂,考完后幸好又可以继 ...

  2. 《你若安好 便是晴天【林徽因传】》读后感

    近日,妻听得一同仁说:当下有部好书,写得很是妙的,姐姐不妨买来读读看. 要是用这本书作者的口吻来写读后感,估计就是上面这种调调.我还是用正常状态谈谈读后感吧. ----------------- 由于 ...

  3. 你若安好便是晴天——林徽因传

    读<你若安好便是晴天--林徽因传>有感 ISBN: 9787511316585 作者:白落梅 推荐指数: ★★★★★ 阅读时间: 2016-03-15 ----白落梅 你可能在很多地方听说 ...

  4. 《此生,若你安好.便是晴天》 -- @ShinePug

    <此生,若你安好.便是晴天>   时光如水,总是无言.若你安好.便是晴天.     在别处看到这句话时 沉吟了良久 莫名就觉出一份温情和感动.     有时候一句话胜过千言万语 也足以温暖 ...

  5. 你若安好便是晴天_百度百科

    你若安好便是晴天_百度百科 你若安好便是晴天 这是一个多义词,请在下列义项中选择浏览 1.人物传记2.杨钰莹原唱歌曲3.蝴蝶季言情小说 林徽因,一代风华的绝世佳人,才华横溢倾倒众生:让徐志摩.梁思成. ...

  6. 你若安好便是晴天nbsp;---------…

    原文地址:你若安好便是晴天 ---------读林徽因传有感作者:静听花开的声音 每个人来到世上,都是匆匆过客,有些人与之邂逅,转身忘记:有些人与之擦肩,必然回首.所有相遇和回眸都是缘分,当你爱上了某 ...

  7. 安笙机器人_演员动态周报 | 李晨王晓晨《北京西城故事》、张翰徐璐《若你安好便是晴天》、包贝尔辛芷蕾《我的机器人女友》...

    电视剧<北京西城故事>,主演:李晨.王晓晨.车晓.刘莉莉等 电视剧<若你安好便是晴天>,主演:张翰.徐璐.洪尧.王瑞子.史卿妍.徐阁.郭子千.焦娜等 电影<我的机器人女友 ...

  8. 《你若安好,便是晴天》

    如果可以,请让我预支一段如莲的时光,哪怕将来某一天加倍偿还.这个雨季会在何时停歇,无从知晓.但我知道,你若安好,便是晴天. 以前看过<林徽因传>,可能也是本身比较欣赏林徽因,看过很多她的故 ...

  9. java - 策略模式、状态模式、卫语句,避免多重if-else(转)

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

最新文章

  1. 985博导给学生改论文,第一篇心态就崩了!
  2. 静态long类型常量serialVersionUID的作用
  3. 乱谈卡巴CCTV黄金时段广告
  4. golang 相互引用_Golang与C互用以及调用C的so动态库和a静态库
  5. java雪崩_【并发编程】java 如何解决redis缓存穿透、缓存雪崩(高性能示例代码)...
  6. epoll 系列函数简介、与select、poll 的区别
  7. linux单片机烧录软件下载,在Linux下烧录51单片机
  8. 【托业】【新托业TOEIC新题型真题】学习笔记4-题库一-P7
  9. 软件测试实战(微软技术专家经验总结)--第四章(测试建模)读书笔记
  10. java float 判断整数_判断一个数是否是整数
  11. Hark的数据结构与算法练习之圈排序
  12. java毕业设计大学生心理咨询管理系统mybatis+源码+调试部署+系统+数据库+lw
  13. 尝试加载 Oracle 客户端库时引发 BadImageFormatException
  14. GIS中快速添加天地图、查看历史影像
  15. 计算机管理记事本,win7旗舰版系统下自带记事本的强大功能汇总【图文详解】...
  16. 短链接生成器,adf.ly、shorte.st、ouo.io、adfoc.us哪个更好,有哪些区别
  17. Hibernate新官网下载源码及支持jar
  18. 如何注册一个顶级域名?需要注意哪些事项?
  19. 计算机在生物学中的应用课程,计算机技术在生物教学中的作用与应用
  20. localhost与ip的区别

热门文章

  1. python怎么打开h5文件_Python 操作 HDF5文件
  2. Springboot 服务端为App集成支付宝支付
  3. SSM基于java的线上阅读平台的设计与实现 毕业设计-附源码291023
  4. 时间精力管理4象限法
  5. 游戏:杀戮尖塔(Slay the spire)mod--拉格朗·月
  6. 第16期高级转录组分析和R数据可视化培训(2022年1月)
  7. VMware安装苹果系统
  8. 以太坊拜占庭硬分叉成功!前亚马逊首席科学家加盟京东金融;俄罗斯将发法定数字货币...
  9. 深度学习与自然语言处理(5)_斯坦福cs224d 大作业测验2与解答
  10. BAPI_PO_CREATE1--单价增大10倍问题