状态模式
当状态改变时,类的行为也发生改变。
状态模式是以面向对象的方式实现状态机的行为设计模式。对于状态模式,通过将每个单独状态实现为派生类的状态模式接口, 来实现一个状态机,并通过调用模式超类的方法来实现状态转换。状态模式可以被解释为一种策略模式,它能够通过调用模式接口定义的方法来切换当前策略。
实例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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");