状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
——> 策略模式: 由客户主动指定context对象所要组合的策略对象是哪一个。

  • 把各个状态分别继承于状态接口, 并得到上下文类对象;
  • 在上下文类中,所有的状态都在构造器(主类)中创建并赋值, 配合函数处理状态(调用状态对象);
  • 当前状态在状态对象集合中游走改变,以反应出context内部的状态,因此,context的行为也会跟着改变。(由上下文类和当前状态决定之后状态)


模式对比:

  • 状态 ── 封装基于状态的行为,并将行为委托到当前状态;
  • 策略 ── 将可以互换的行为封装起来,然后使用委托的方法,决定使用哪一个行为;
  • 模板方法 ── 由子类决定如何实现算法种的某些步骤;

还是最喜欢 ‘策略模式’,简单容易理解,好用 ^{}^ ; 模板也不错,hook这个东东不一般; 状态模式之前在《用星际学习PHP设计模式》中的坦克例子中看过,把状态抽象,通过对象的互传进行回调。

终于到第10章了,OOP果然不是好学的…呼…