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

  • 相关阅读:
    jstl动态生成下拉列表框
    nested exception is java.lang.NoClassDefFoundError:org/hibernate/engine/SessionFactoryImplementor
    java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z
    java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
    java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z
    substring(int beginIndex,int length)的参数
    reverse() 颠倒StringBuffer对象中的字符
    jsp servlet 分页
    & | && ||
    C++ 导入导出
  • 原文地址:https://www.cnblogs.com/wendong/p/3848875.html
Copyright © 2011-2022 走看看