/**

* 状态模式

* 允许一个实例在内部修改状态行为

*

*/

/**

* Class state

* 状态类 抽象

*/

abstract class AState

{

abstract function handle(Context $context);

}

/**

* Class StateA

* 抽象状态实例A

*/

class StateA extends AState

{

// 保存自身实例

private static $_examples;

private function __construct()

{

// echo '实例自动构造函数A' . PHP_EOL;

}

private function __clone()

{

// echo '实例自动析构函数A' . PHP_EOL;

// TODO: Implement __clone() method.

}

public static function Examples()

{

// 获取自身实例

if (!isset(self::$_examples)) {

self::$_examples = new self;

}

return self::$_examples;

}

function Handle(Context $context)

{

// TODO: Implement handle() method.

echo 'stateA' . PHP_EOL;

$context->ChangeState(StateB::Examples());

}

}

/**

* Class StateB

* 抽象状态B

*/

class StateB extends AState

{

// 保存自身实例

private static $_examples;

private function __construct()

{

// echo '实例自动构造函数B' . PHP_EOL;

}

private function __clone()

{

// echo '实例自动析构函数B' . PHP_EOL;

// TODO: Implement __clone() method.

}

public static function Examples()

{

// 获取自身实例

if (!isset(self::$_examples)) {

self::$_examples = new self;

}

return self::$_examples;

}

// Handle 状态实例转跳

function Handle(Context $context)

{

// TODO: Implement handle() method.

echo 'stateB' . PHP_EOL;

$context->ChangeState(StateA::Examples());

}

}

/**

* Class context

* 上下文,环境内容

* 状态保存类

*/

class Context

{

protected $state;

public function __construct(AState $AState)

{

// 初始状态 保存

$this->state = $AState;

}

// 修改状态

public function ChangeState(AState $AState)

{

$this->state = $AState;

}

public function Handle()

{

// 调用保存实例的Handle

$this->state->Handle($this);

}

public function Request()

{

$this->state->Handle($this);

}

}

$context = new Context(StateB::Examples());

$context->Request(); // stateB

$context->Request(); // stateA

$context->Request(); // stateB

php状态,PHP 状态模式 - 304158的个人空间 - OSCHINA - 中文开源技术交流社区相关推荐

  1. php 元_PHP 享元模式 - 304158的个人空间 - OSCHINA - 中文开源技术交流社区

    /** * 享元模式 * 共享子系统 * 抽象子系统实现接口 * 根据key储存对应的子系统实例 */ /** * Interface ServiceIO * 共享子系统抽象接口 */ interfa ...

  2. c语言的文件打开模式,c语言文件打开模式 - osc_b2jf5efr的个人空间 - OSCHINA - 中文开源技术交流社区...

    (转载) 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 只可以读 只可以写 读写兼备 文本模式 r w a r+ w+ a+ 二进制模式 rb wb ab rb+ (r+ ...

  3. php是阻塞模式吗,PHP非阻塞模式 - 黑白大熊猫的个人空间 - OSCHINA - 中文开源技术交流社区...

    by 尘缘 on 七月 31st, 2014 // Filed Under → php 让PHP不再阻塞当PHP作为后端处理需要完成一些长时间处理,为了快速响应页面请求,不作结果返回判断的情况下,可以 ...

  4. mysql 事件状态enable_mysql事件 - wayhk的个人页面 - OSCHINA - 中文开源技术交流社区...

    二.创建事件(CREATE EVENT) 先来看一下它的语法:EVENT [IF  ] event_name ON SCHEDULE schedule [ON COMPLETION [] PRESER ...

  5. 【设计模式】享元模式 简介 ( 定义 | 对象池 | 内部状态 | 外部状态 | 适用场景 | 相关角色 )

    文章目录 I . 享元模式 简介 II . 享元模式 内部状态 和 外部状态 III . 享元模式 适用场景 IV . 享元模式 优缺点 V . 享元模式 相关模式 VI . 享元模式 相关角色 I ...

  6. 事务的状态(状态模式)

    [0]README 0.1)本文部分文字描述转自 "head first设计模式",旨在学习  事务的状态(状态模式) 的基础知识: [1]应用场景一 1.1)还记得成都市各大高校 ...

  7. Flink 状态管理:算子状态、键值分区状态、状态后端、有状态算子的扩缩容

    文章目录 状态管理 算子状态 键值分区状态 状态后端(State Backends) 有状态算子的扩缩容 状态管理 通常意义上,函数里所有需要任务去维护并用来计算结果的数据都属于任务的状态,可以把状态 ...

  8. linux stp 缺省状态,STP状态

    端口状态 描 述 Disabled 端口没有启用 此状态下端口不转发数据帧,不学习MAC地址表,不参与生成树计算. Listening 侦听状态 此状态下端口不转发数据帧,不学习MAC地址表,只参与生 ...

  9. 操作系统之进程管理:2、进程的状态以及状态转化

    2.进程的状态以及状态转化 思维导图 进程状态 进程状态转化 进程的组织方式 链式方式 索引方式 思维导图 进程状态 进程状态转化 看个例子: 1.当我们点击QQ.exe打开QQ时,QQ进程就会被创建 ...

最新文章

  1. KMP算法求回溯数组的步骤
  2. mac terminal常用命令接触
  3. python 列表(list)操作及函数
  4. 《SLIC Superpixels》阅读笔记
  5. 与您相约.NET Conf China 2020! 新进2位重磅嘉宾
  6. string.Empty 和 并不总是可以互换的
  7. js提交出现post错误_阿里云的 Node.js 稳定性实践
  8. php根据地理位置签到,微信小程序获取地理位置实现定位签到功能
  9. virtualenvwrapper
  10. leetcode力扣75. 颜色分类
  11. AttributeError: type object 'h5py.h5.H5PYConfig' has no attribute '__reduce_
  12. 一天赚148万元,科大讯飞2018年净利润达5.42亿,但53%为政府补助
  13. PowerShell Gallery .nupkg手动下载将.nupkg文件重命名为.zip,然后将内容提取到本地文件夹中
  14. Oracle 创建表详解(create table)
  15. 2021全网影视APP搭建教程全套完整版
  16. 如何写好一篇科技论文?
  17. 教师节HTML祝福网页,教师节的祝福语
  18. 企业微信中授权小程序
  19. linux做pptpd服务,PPTPD搭建
  20. Hadoop(yarn)集群安装

热门文章

  1. dubbo配置参考手册
  2. 快来学习怎么可视化监控你的Python爬虫
  3. (function($){...})(jQuery)是什么意思 ——jQuery插件
  4. 关于Jquery中animate可以操作css样式属性总结
  5. Div+CSS布局入门教程(五) 页面制作-用好border和clear 附加:1.DIV+CSS设计原则 2.DIV+CSS中标签ul ol li dl dt dd用法
  6. 石油、黄金与美元的游戏
  7. 计算 期望与方差(mean and Variance)在 Tensorflow 与 Numpy 对比
  8. mysql5.6.4m7 linux安装_mysql-5.6.4-m7installinlinux
  9. Python简介及环境搭建
  10. 吴恩达深度学习 —— 3.6 激活函数