php与设计模式-状态模式

PHP设计模式之状态模式定义与用法详解 很多人把状态设计模式看做是实现模拟器和游戏的主要方法.总的说来, 这确实是状态模式的目标,不过险些之外, 状态模型(状态引擎)和状态设计模式在PHP中也有很多应用.用PHP完成更大的项目时, 包括Facebook和WordPress, 会有更多的新增特性和当前状态需求.对于这种不断有改变和增长的情况, 就可以采用可扩展的状态模式来管理.状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。状态机是一个模型, 其重点包括不同的状态, 一个状态到另一个状态的变迁, 以及导致状态改变的触发器. 阅读详情

状态模式

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

Demo

<?php 
    /**
     * Created by PhpStorm->
     */ 
 
    //状态接口 
    interface IState 
    { 
        function WriteCode(Work $w); 
    } 
 
    //上午工作状态 
    class AmState implements IState 
    { 
        public function WriteCode(Work $w) 
        { 
            if($w->hour<=12) 
            { 
                echo "当前时间:{$w->hour}点,上午工作;犯困,午休。<br/>"; 
            } 
            else 
            { 
                $w->SetState(new PmState()); 
                $w->WriteCode(); 
            } 
        } 
    } 
 
    //下午工作状态 
    class PmState implements IState 
    { 
        public function WriteCode(Work $w) 
        { 
            if($w->hour<=17) 
            { 
                echo "当前时间:{$w->hour}点,下午工作状态还不错,继续努力。<br/>"; 
            } 
            else 
            { 
                $w->SetState(new NightState()); 
                $w->WriteCode(); 
            } 
        } 
    } 
 
    //晚上工作状态 
    class NightState implements IState 
    { 
 
        public function WriteCode(Work $w) 
        { 
            if($w->IsDone) 
            { 
                $w->SetState(new BreakState()); 
                $w->WriteCode(); 
            } 
            else 
            { 
                if($w->hour<=21) 
                { 
                    echo "当前时间:{$w->hour}点,加班哦,疲累至极。<br/>"; 
                } 
                else 
                { 
                    $w->SetState(new SleepState()); 
                    $w->WriteCode(); 
                } 
            } 
        } 
    } 
 
    //休息状态 
    class BreakState implements IState 
    { 
 
        public function WriteCode(Work $w) 
        { 
            echo "当前时间:{$w->hour}点,下班回家了。<br/>"; 
        } 
    } 
 
    //睡眠状态 
    class SleepState implements IState 
    { 
 
        public function WriteCode(Work $w) 
        { 
            echo "当前时间:{$w->hour}点,不行了,睡着了。<br/>"; 
        } 
    } 
 
    //工作状态 
    class Work 
    { 
        private $current; 
        public function Work() 
        { 
            $this->current = new AmState(); 
        } 
 
        public $hour; 
 
        public $isDone; 
 
        public function SetState(IState $s) 
        { 
            $this->current = $s; 
        } 
 
        public function WriteCode() 
        { 
            $this->current->WriteCode($this); 
        } 
} 
 
$emergWork = new Work(); 
$emergWork->hour = 9; 
$emergWork->WriteCode(); 
$emergWork->hour = 10; 
$emergWork->WriteCode(); 
$emergWork->hour = 13; 
$emergWork->WriteCode(); 
$emergWork->hour=14; 
$emergWork->WriteCode(); 
$emergWork->hour = 17; 
$emergWork->WriteCode(); 
 
$emergWork->IsDone = true; 
$emergWork->IsDone = false; 
 
$emergWork->hour = 19; 
$emergWork->WriteCode(); 
 
$emergWork->hour = 22; 
$emergWork->WriteCode(); 

请关注我的订阅号

订阅号.png

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法) 本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。 阅读详情

相关推荐

深入解析set_input_delay:从理论到实践的关键时序约束

本文深入解析了FPGA/ASIC设计中关键的时序约束命令set_input_delay,从理论到实践详细阐述了其工作原理。文章重点讲解了如何结合setup time和hold time,通过计算-max与-min值来精确描述外部延迟,确保芯片内部逻辑能稳定捕获数据,并介绍了虚拟时钟、DDR接口约束等实战技巧与常见陷阱。

weixin_29313423的博客 316

设计模式之状态模式(PHP实现)

github地址:https://github.com/ZQCard/design_pattern /** * 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 * 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 * 对象的行为依赖于它的状态(属性),并且可以...

diaoliu7156的博客 275

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载)

本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。

weixin_33737774的博客 595

php状态命令,php设计模式 State (状态模式)

原标题:php设计模式 State (状态模式)关注微信公众号PHP技术大全每天精彩分享不间断允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类状态state模式是GOF23种模式中的一种,和命令模式一样,也是一种行为模式。状态模式和命令模式相当像,一样是“接口—实现类”这种模式的应用,是面向接口编程原则的体现。状态模式属于对象创建型模式,其意图是允许一个对象在其内部状态改...

weixin_39747721的博客 95

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

《UE4游戏开发》之 《查cook资源失败,问题记录》

当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。 下面就材质cook出错,增加一些日志,方便查找问题做简单记录 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMat.

qq_21919621的博客 2580

php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States)(一)为什么需要状态模式1,将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。2,本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理...

weixin_39546312的博客 106

AISHELL-2 中文语音数据库

AISHELL-1 is by far the largest open-source speech corpus available for Mandarin speech recognition research. It was released with a baseline system containing solid training and testing pipelines for Mandarin ASR. In AISHELL-2, 1000 hours of cle

AI_SHELL的博客 7886

PHP讲解设计模式:状态模式

首先,定义一个State接口,所有具体的状态类都实现了这个接口。State接口定义了handle方法,用于处理特定状态下的行为。php// State 接口// ConcreteStateA 类表示具体的状态 A// ConcreteStateB 类表示具体的状态 B?在这个例子中,State接口定义了handle方法,所有具体的状态类都实现了这个接口。和类分别表示具体的状态 A 和状态 B,并在handle方法中处理特定状态下的行为。当某个状态下处理完请求后,可以通过。

软件架构师笔记 720

MCGS 昆仑通态触摸屏 modbus TCP 数据转发

MCGS触摸屏数据转发modbus TCP数据转发

m0_63451859的博客 2万+

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6684

PHP-设计模式-状态模式

<?php /** * 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。 * 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 * * 区别: * - 策略的改变由client完成,client持有context的引用;而状态的改变是由context或状态自己, * 就是自身持有context * - 简单说就是策略是client持有context,而状态是本身持有context * 使用场景:大量和对象状态

eight_eyes的博客 215

2025_NIPS_Grounded Reinforcement Learning for Visual Reasoning

尽管基于思维链的强化学习已在数学、编程等任务中显著提升语言模型性能,但视觉推理面临额外复杂性——需模型引导视觉注意力、解读感知输入,并将抽象推理锚定到空间证据上。本文提出ViGoRL(视觉接地强化学习),这是一种通过强化学习训练的视觉语言模型,能将每个推理步骤明确锚定到特定视觉坐标。受人类视觉决策启发,ViGoRL学会生成空间接地的推理轨迹,在每个步骤引导视觉注意力聚焦任务相关区域。当需要细粒度探索时,我们提出的多轮强化学习框架允许模型随着推理展开动态缩放至预测坐标。

c_cpp_csharp的专栏 58

php设计学习学校,学习php设计模式 php实现状态模式

一、意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类状态模式变化的位置在于对象的状态二、状态模式结构图三、状态模式中主要角色抽象状态(State)角色:定义一个接口,用以封装环境对象的一个特定的状态所对应的行为具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为环境(Context)角色:定义客户端所感兴趣的接口...

weixin_29734123的博客 62

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2017-12-29-PHP设计模式【状态模式】 - 副本

layout title date author desc in_head post PHP设计模式之状态模式 2017-12-29 09:30:02 +0800 南丞 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更...

PFinal社区 154

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PHP设计模式——状态模式

前言 状态设计模式是Gof提出的最吸引人的模式之一,也是一种最有用的模式。游戏通常就采用状态模式,因为游戏中的对象往往会非常频繁地改变状态。状态模式的作用就是允许对象在状态改变时改变其行为。还有很多其他模拟应用(不一定是游戏)也依赖于状态模式。本文将会谈到并举例说明。按照传统思维,如果有多个状态的话一般就是用if、else if、swit...

weixin_34167043的博客 139

PHP设计模式之状态模式

PHP设计模式之状态模式状态模式从字面上其实并不是很好理解。这里的状态是什么意思呢?保存状态?那不就是备忘录模式了。其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了...

硬核项目经理 211

php set state,php设计模式 state (状态模式)

25种php设计模式,你全都知道吗?下面用代码介绍状态模式(state模式)

weixin_33241808的博客 142

011-PHP设计模式之状态模式

十一、状态模式 11.1 什么是状态模式 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类 11.2 怎么实现状态模式 State 抽象状态角色:接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换 ConcreteState 具体状态角色:每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状态处理 Context 环境角色:定义客户端需要的接口,并且负责具体状态的切换 <?php namespace state; class Context { public

仟玑的博客 296

php 状态模式,PHP设计模式之状态模式

状态模式从字面上其实并不是很好理解。这里的状态是什么意思呢?保存状态?那不就是备忘录模式了。其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样。说起来有点拗口吧,先学习概念之后再看。Gof类图及解释GoF定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类> GoF类图> 代码实现class Context{private $sta...

weixin_39688170的博客 202

php设计模式解决多判断,PHP设计模式——状态模式

状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。UML类图:图片.png角色:上下文环境(Work):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的具体对象来处理。抽象状态(State)...

weixin_35363591的博客 248

php if多条件_PHP设计模式之状态模式

状态模式从字面上其实并不是很好理解。这里的状态是什么意思呢?保存状态?那不就是备忘录模式了。其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样。说起来有点拗口吧,先学习概念之后再看。Gof类图及解释GoF定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类 GoF类图 代码实现class Context { private $state...

weixin_39919948的博客 367

PHP设计模式系列(十一):状态模式

状态模式状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。模式结构状态模式包含如下角色: Context: 环境类 State: 抽象状态类 ConcreteState: 具体状态类 结构图PHP代码实现<?php /** * 状态模式 */ /

qq_32300363的博客 1500
上一篇: php与设计模式-解释器模式
下一篇: php与设计模式-职责链模式
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值