zoukankan      html  css  js  c++  java
  • 大话设计模式之----状态模式

    <?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();
    ?>

  • 相关阅读:
    CodeForces 567C. Geometric Progression(map 数学啊)
    【 D3.js 高级系列 — 7.0 】 标注地点
    我的家乡:三河古镇已经登上央视CCTV-1新闻联播啦!
    自考--初读
    微信支付v2开发(6) 发货通知
    微信支付v2开发(7) 告警通知
    微信支付v2开发(8) 维权通知
    微信公众平台注册
    微信公众平台开发(95) 世界杯赛程
    微信公众平台开发(96) 多个功能整合
  • 原文地址:https://www.cnblogs.com/wendong/p/3848875.html
Copyright © 2011-2022 走看看