状态模式

状态模式,对象具有一些不同的状态,将和状态相关的行为和属性进行封装;
当状态改变后,其它地方不需要大量的判断当前状态,只要调用当前状态的方法即可。

 

看过《变形金刚》吧,拿大家熟悉的“大黄蜂”为例:
它在正常状态是辆雪佛兰轿车,而变形后成为人型机器人。
汽车形态时,移动是靠轮子;人型形态时,移动是靠腿。
无论是轮子还是腿,要达到的目的都是移动(即:使用的是同一个方法!)。

/** * 汽车状态类 */ class State_Car{ public function move() { echo '用轮子跑<br />'; } } /** * 人型状态类 */ class State_Man{ public function move() { echo '用腿跑<br />'; } } /** * 变形金刚类 */ class Transformer{ private $_state; public function __construct() { $this->_state = new State_Car(); //初始化时候是汽车状态 } public function transform($state) //变形方法 { switch($state){ case 'car': $this->_state = new State_Car(); break; case 'man': $this->_state = new State_Man(); break; } } public function move() { $this->_state->move(); //根据当前状态,自动执行相应动作 } } $Bumblebee = new Transformer(); //初始化一个“大黄蜂” $Bumblebee->move(); //看看他怎么移动的 $Bumblebee->transform('man'); //“汽车人,变形” $Bumblebee->move(); //再让它移动看看 /* 输出: 用轮子跑 用腿跑 */ 

你可能感兴趣的:(function)