zoukankan      html  css  js  c++  java
  • 状态模式的另一种写法

    <?php
    /**
     * 状态模式
     * 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类
     */
    
    /*接口*/
    interface State
    {
        public function handle($state);//切换到下一个状态
        public function display();//显示当前状态
    }
    
    /*状态A*/
    class StateA implements State
    {
        public function handle($context)
        {
            $context->setState(new StateB());
        }
    
        public function display()
        {
            echo "state A<br />";
        }
    }
    /*状态B*/
    class StateB implements State
    {
        public function handle($context)
        {
            $context->setState(new StateC());
        }
    
        public function display()
        {
            echo "state B<br/>";
        }
    }
    /*状态C*/
    class StateC implements State
    {
        public function handle($context)
        {
            $context->setState(new StateA());
        }
    
        public function display()
        {
            echo "state C<br/>";
        }
    }
    
    
    class Context
    {
        private $_state = null;
        public function __construct($state)//给初始状态
        {
            $this->setState($state);
        }
    
        public function setState($state)//设置状态的函数
        {
            $this->_state = $state;
        }
    
        public function request()//执行显示状态并切换状态
        {
            $this->_state->display();
            $this->_state->handle($this);
        }
    }
    
    // 实例化一下
    $objContext = new Context(new StateB());
    $objContext->request();
    $objContext->request();
    $objContext->request();
    $objContext->request();
    $objContext->request();
    ?>
  • 相关阅读:
    UVa 1252 20个问题
    HDU 2196 Computer
    HDU 1520 Anniversary party
    HDU 2066 一个人的旅行
    UVa 10048 噪音恐惧症(Floyd)
    UVa 247 电话圈(Floyd传递闭包)
    HDU 2544 最短路(Dijkstra)
    HDU 1548 A strange lift (Dijkstra)
    UVa 1151 买还是建
    UVa 1395 苗条的生成树(Kruskal+并查集)
  • 原文地址:https://www.cnblogs.com/jiufen/p/5026314.html
Copyright © 2011-2022 走看看