zoukankan      html  css  js  c++  java
  • 一天一个设计模式(18)——状态模式

    状态模式 

    当状态改变时,类的行为也发生改变。

    状态模式是以面向对象的方式实现状态机的行为设计模式。对于状态模式,通过将每个单独状态实现为派生类的状态模式接口, 来实现一个状态机,并通过调用模式超类的方法来实现状态转换。状态模式可以被解释为一种策略模式,它能够通过调用模式接口定义的方法来切换当前策略。

    实例

    <?php
    interface WritingState{
        public function write(string $words);
    }
    
    class UpperState implements WritingState{
        public function write(string $words){
            echo strtoupper($words);
        }
    }
    
    class LowerState implements WritingState{
        public function write(string $words){
            echo strtolower($words);
        }
    }
    
    class DefaultState implements WritingState{
        public function write(string $words){
            echo $words;
        }
    }
    
    class Editor{
        private $state;
        public function __construct(WritingState $state){
            $this->state=$state;
        }
    
        public function setState($state){
            $this->state=$state;
        }
    
        public function type(string $words){
            $this->state->write($words);
        }
    }
    
    $state=new DefaultState();
    $editor=new Editor($state);
    $editor->type("First Type");
    
    $editor->setState(new UpperState());
    $editor->type("Second Type");
    
    $editor->setState(new LowerState());
    $editor->type("Third Type");
    状态模式实例

    本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/7453138.html

  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/Bin-x/p/7453138.html
Copyright © 2011-2022 走看看