美文网首页
状态模式 (state design pattern)

状态模式 (state design pattern)

作者: lifefruity | 来源:发表于2020-11-21 13:29 被阅读0次

参考《大话设计模式》
当有很多if else判断的时候,要修改一段if else里的逻辑,会显得很容易出错,而且不容易维护,这时可以使用状态模式
场景:按照上班时间11点前干活,11-13点休息,13点之后干活。如果明天放假,说今天13点之后就下班,那么只要改一个类就行了,方便修改

<?php 
interface state{
    function doIt($obj);
}

class amState implements state{
    function doIt($obj){
        if($obj->hour <= 11){
            echo $obj->hour.'上午干活' . "<br>";
        }else{
            $newObj = new pmState();
            $obj->setState($newObj);
            $obj->doIt();
        }
    }
}

class pmState implements state{
    function doIt($obj){
        if($obj->hour <= 13){
            echo $obj->hour.'中午休息' . "<br>";
        }else{
            $newObj = new eveningState();
            $obj->setState($newObj);
            $obj->doIt();
        }
    }
}

class eveningState implements state{
    function doIt($obj){
        //如果明天放假,今天下午放假,直接改这个类就可以了,不需要改其他代码
        echo $obj->hour.'下班了' . "<br>";

//        if($obj->hour <= 18){
//            echo $obj->hour.'下午不想干活' . "<br>";
//        }else{
//            echo $obj->hour.'下班了' . "<br>";
//        }
    }
}


class man{
    public $hour;
    public function __construct(){
        $this->state = new amState();
    }

    public function setState($state){
        $this->state = $state;
    }

    public function doIt(){
        $this->state->doIt($this);
    }
}


$obj = new man();
$obj->hour = 8;
$obj->doIt();
$obj->hour = 12;
$obj->doIt();
$obj->hour = 14;
$obj->doIt();
$obj->hour = 19;
$obj->doIt();

相关文章

  • 状态模式 (state design pattern)

    参考《大话设计模式》当有很多if else判断的时候,要修改一段if else里的逻辑,会显得很容易出错,而且不容...

  • 自动驾驶谈谈『状态模式』

    目录:设计模式之小试牛刀源码路径:Github-Design Pattern 定义(State Pattern):...

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • 状态模式(State Pattern)

    一个对象的状态之间可以进行相互转换,通常有一下两种实现状态转换的方式: 统一由环境类(Context)来负责状态之...

  • 状态模式(State Pattern)

    选自菜鸟教程 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为...

  • 状态模式(State Pattern)

    状态模式:允许对象在内部状态改变时改变他们的行为,对象看起来就像修改他们的类。 状态模式是行为型模式之一。状态模式...

  • 状态模式(State Pattern)

    状态模式 意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式主要解决的是当控...

  • C++设计模式(3)

    本文预览: 状态模式 组合模式 迭代器 职责链 命令 状态模式 定义:状态模式(State Pattern),允许...

  • State Pattern模式(状态模式)

    状态模式(State Pattern):用类来表示状态。这种类型的设计模式属于行为型模式。 介绍 意图:用类来表示...

  • Android设计模式——状态模式(十一大行为型)

    1.状态模式介绍 状态模式(State Pattern),是十一大行为型设计模式之一。 状态模式中...

网友评论

      本文标题:状态模式 (state design pattern)

      本文链接:https://www.haomeiwen.com/subject/hkzsiktx.html