<?php
    #状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。
    //抽象状态
    abstract class State{
        public $w;
        abstract function WriteProgram($w);
    }
    
    //上午和中午工作状态类
    class ForenoonState extends State{
        function WriteProgram($w){
            if($w->Hour<12){
                echo "当前时间:".$w->Hour ."点 上午工作,精神百倍";
            }else{
                $w->SetState(new NoonState());
                $w->WriteProgram();
            }
        }
    }
    
    //中午工作状态
    class NoonState extends State{
        public function WriteProgram($w){
            if($w->Hour<13){
                echo "当前时间:".$w->Hour ."点 饿了,午饭;犯困,午休。";
            }else{
                $w->setState(new AfternoonState());
                $w->WriteProgram();
            }
        }
    }
    
    //下午工作状态
    class AfternoonState extends State{
        public function WriteProgram($w){
            if($w->Hour<17){
                echo '当前时间:'.$w->Hour ."点 下午状态还不错,继续努力";
            }else{
                $w->SetState(new EveningState());
                $w->WiteProgram();
            }
        }
    
    }
    
    //晚间工作状态
    class EveningState extends State{
        public function WriteProgram($w){
            if($w->TaskFinished){//工作完成时
                $w->SetState(new RestState());
                $w->WriteProgram();
            }else{
                if($w->Hour<21){
                    echo "当前时间".$w->Hour ."点 加班哦,疲累之极";
                }else{
                    $w->SetState(new SleepingState());
                    $w->WriteProgram();
                }
            }
        }
    }
    
    //睡眠状态和下班休息状态
    //睡眠状态
    class SleepingState extends State
    {
        public function WriteProgram($w){
            echo "当前时间:".$w->Hour."点不行了,睡着了";
        }
    }
    
    //下班休息状态
    class RestState extends State{
        public function WriteProgram($w){
            echo "当前时间:".$w->Hour ."点下班回家了";
        }
    }
    
    //工作类
    class Work{
        private $current;
        private $Hour;
        private $finish = false;
        
        public function __construct(){
            $this->current = new ForenoonState();
        }
        
        public function __get($Hour){
            return $this->$Hour;
        }
        
        public function __set($param,$val){
            $this->$param = $val;
        
        }
        
        public function SetState($s){
            $this->current = $s;
        }
        
        public function WriteProgram(){
            $this->current->WriteProgram($this);
        }
    }
    
    
    //客户端代码
    //紧急项目
    $work = new Work();
    $work->Hour = 9;
    $work->WriteProgram();
    $work->Hour = 15;
    $work->WriteProgram();
?>

转载于:https://www.cnblogs.com/wendong/p/3848875.html

大话设计模式之----状态模式相关推荐

  1. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  2. java设计模式之状态模式_Java中的状态设计模式

    java设计模式之状态模式 在本教程中,我们将探讨另一种流行的行为设计模式-状态设计模式. 当我们使用可以存在于多个状态的对象时,状态设计模式的知识变得非常有用. 当对象的行为取决于其当前状态时,我们 ...

  3. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  4. 图解java多线程设计模式 pdf_图解Java设计模式之状态模式

    图解Java设计模式之状态模式 APP抽象活动问题 状态模式基本介绍 状态模式的原理类图 状态模式解决APP抽奖问题 状态模式的注意事项和细节 APP抽象活动问题 请编写程序完成APP抽象活动,具体要 ...

  5. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  6. python的out模式_Python设计模式之状态模式

    状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...

  7. 码农小白 设计模式篇 状态模式

    码农小白 设计模式篇 状态模式 1.状态的认识 2.面向过程思维的代码实现 小结: 3.面向对象实现 小结 4.用状态模式实现 1.状态模式的简介 2.状态模式的好处 3.状态模式的使用 4.代码实现 ...

  8. 设计模式之状态模式(State)

    什么是状态? 我们在购物网站进行购物时,订单会产生几种状况:已下单.已付款.送货中.确定收货等状态. 所以系统会判断该订单的状态,不管是哪种状态都应给出对应的操作,这就是状态. 什么是状态模式? 在软 ...

  9. PHP设计模式之状态模式定义与用法详解

    本文实例讲述了PHP设计模式之状态模式定义与用法.分享给大家供大家参考,具体如下: 什么是状态设计模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当 ...

  10. 大话设计模式(二)代理模式

    大话设计模式(二)代理模式 前言 代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一.代理模式的定义:Provide a surrogate or placeholder ...

最新文章

  1. 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
  2. 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!...
  3. C语言编程的几个小注意事项1
  4. mplayer1.3.0交叉编译
  5. HelloSilverlight
  6. 2019牛客多校第四场 B xor (线性基求交)
  7. mybatis源码阅读(六) ---StatementHandler了解一下
  8. appium + python 搭建
  9. word-break属性和css换行显示
  10. 【NOIP2013提高组T3】加分二叉树
  11. Centos6.9如何安装vsftp
  12. 19.04.13--指针笔记
  13. 基于阿里钉钉网页版制作绿色版客户端
  14. bootstrap框架中的分割线
  15. vue element 项目 表单校验 保姆级教程 纳税人识别号 公司电话传真 银行卡校验(包含注意点)
  16. ​你不是真正的“匿名”:如何划定匿名数据和去识别化数据?
  17. Player 本地播放器推荐-倍速播放-本地视频播放器-播放器-电脑手机互传文件-附下载地址
  18. mysql 根据经纬度查询范围点
  19. MapReduce -----MapReduce 调优
  20. 计算机网络:网络安全(网络安全概述)

热门文章

  1. Linux paste命令
  2. python 通过ftplib 实现上传下载
  3. 在iOS开发的Quartz2D使用中实现图片剪切和截屏功能
  4. Myeclipse字符集设置
  5. CentOS 6.2 mini安装桌面环境
  6. openmeeting开发心得及相关文档
  7. Eclipse创建并运行Java程序输出Hello World
  8. [网络流24题] 软件补丁问题
  9. Linux下Oracle新建一个数据库、启动多实例数据库
  10. mysql zf_ZF 连接 Mysql