...

<?php
/*
The state pattern encapsulates the varying behavior for the same object based on its
internal state, making an object appear as if it has changed its class.
*/

interface  Statelike {
    public function writeName(StateContext $context, $name);
}

class StateLowerCase implements Statelike {
    public function writeName(StateContext $context, $name) {
        echo strtolower($name);
        $context->setState(new StateMultileUpperCase());
    }
}

class StateMultileUpperCase implements Statelike {
    private $count = 0;

    public function writeName(StateContext $context, $name) {
        $this->count++;
        echo strtoupper($name);

        if ($this->count > 1) {
            $context->setState(new StateLowerCase());
        }
    }
}

class StateContext {
    private $state;

    public function setState(Statelike $state) {
        $this->state = $state;
    }

    public function writeName($name) {
        $this->state->writeName($this, $name);
    }
}

$stateContext = new StateContext();
$stateContext->setState(new StateLowerCase());
$stateContext->writeName('Monday<br/>');
$stateContext->writeName('TuesDay<br/>');
$stateContext->writeName('Wednesday<br/>');
$stateContext->writeName('Thursday<br/>');
$stateContext->writeName('Friday<br/>');
$stateContext->writeName('Saturday<br/>');
$stateContext->writeName('Sunday<br/>');

?>

最新文章

  1. kd树和knn算法的c语言实现
  2. 实践最简单的项目:WC
  3. 【自然框架】终于把源码弄到git上了。
  4. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup
  5. XMLHttpRequest 2.0与FileReader接口的方法
  6. .Net开源数据库设计工具Mr.E For Linq (EF 6.1) 教程(二)级联删除和触发器
  7. android中利用实现二级联动的效果
  8. zoj 1083 Frame Stacking
  9. VC 绘图技巧--自定义形状图形
  10. c++设计模式-----抽象工厂模式
  11. Java静态代理和动态代理总结
  12. OpenCV 之 网络摄像头
  13. Egg + Vue 服务端渲染工程化实现
  14. IOS设备设计完整指南
  15. [wordpress]WordPress地址(URL)错误,修改解决方案
  16. WPF界面假死
  17. chromedriver与chrome各版本的对应关系表
  18. Linux下的文件系统2
  19. Newtonsoft.Json解析数组
  20. 数据结构与算法之PHP查找算法(顺序查找)

热门文章

  1. NLP之分词
  2. MacbookPro升级10.15 Catalina之后无法读写NTFS
  3. Circumference of circle
  4. thinkphp5.0学习(九):TP5.0视图和模板
  5. 问题查询-tomcat内存泄露
  6. 【网络知识之五】TCP
  7. Python 发送企业微信消息
  8. 数据库的dml、ddl和dcl的概念
  9. python实现ldap接入
  10. 基于 HTML5 WebGL 的 3D 智慧隧道漫游巡检