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();
    ?>
  • 相关阅读:
    ubuntu下mysql的安装
    useradd和adduser的区别
    C和指针之学习笔记(6)
    C和指针之学习笔记(5)
    C和指针之学习笔记(4)
    Centos 7搭建Gitlab服务器超详细
    .NET Core sdk和runtime区别
    .NET平台历程介绍
    GitLabCICD
    Jenkins+gitlab+msbuild
  • 原文地址:https://www.cnblogs.com/jiufen/p/5026314.html
Copyright © 2011-2022 走看看