分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

PHP设计模式 - 状态模式

发布时间:2023-09-06 02:01责任编辑:赖小花关键词:PHP

状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
UML类图:

角色:
上下文环境(Work):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的具体对象来处理。
抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
具体状态(AmState):实现抽象状态定义的接口。

<?phpinterface State { // 抽象状态角色 ???public function handle(Context $context); // 方法示例}class ConcreteStateA implements State { // 具体状态角色A ???private static $_instance = null; ???private function __construct() {} ???public static function getInstance() { // 静态工厂方法,返还此类的唯一实例 ???????if (is_null(self::$_instance)) { ???????????self::$_instance = new ConcreteStateA(); ???????} ???????return self::$_instance; ???} ???public function handle(Context $context) { ???????echo ‘concrete_a‘."<br>"; ???????$context->setState(ConcreteStateB::getInstance()); ???}}class ConcreteStateB implements State { // 具体状态角色B ???private static $_instance = null; ???private function __construct() {} ???public static function getInstance() { ???????if (is_null(self::$_instance)) { ???????????self::$_instance = new ConcreteStateB(); ???????} ???????return self::$_instance; ???} ???public function handle(Context $context) { ???????echo ‘concrete_b‘."<br>"; ???????$context->setState(ConcreteStateA::getInstance()); ???}}class Context { // 环境角色 ????private $_state; ???public function __construct() { // 默认为stateA ???????$this->_state = ConcreteStateA::getInstance(); ???} ???public function setState(State $state) { ???????$this->_state = $state; ???} ???public function request() { ???????$this->_state->handle($this); ???}}// client$context = new Context();$context->request();$context->request();$context->request();$context->request();/* 输出:concrete_aconcrete_bconcrete_aconcrete_b */

PHP设计模式 - 状态模式

原文地址:https://www.cnblogs.com/taozi32/p/9226850.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved