上一篇:设计模式(二十二)——一文搞懂中介者模式与观察者模式区别

状态模式与策略模式区别

1、类图、类的结构一样:

状态模式:Context环境类、State类(抽象状态类、具体状态类)

策略模式:Context环境类、Strategy类(抽象策略类、具体策略类)

两种模式都是行为型模式,UML图相同,都是将核心类(State类或Strategy类)注入到Context类中,在客户端通过操作Context环境类间接操作核心类(State类或Strategy类),巧妙的在客户端屏蔽核心类。

2、表达意义稍有不同:

状态可以看作是Context类的一个内在属性,是必不可少的,新建Context类对象时,Context类的初始化函数中就要初始化状态属性;

策略不是Context的属性,是Context类调用的一个外界的东西;

所以,一般核心类(State类或Strategy类)是内在属性的时候是状态模式,是外界东西的时候是策略模式。

3、代码逻辑稍有不同:状态模式是含有“状态切换”逻辑(最大的不同)

状态模式中一定含有“状态切换”逻辑,不管是在ConcreteState类中还是在Context类中,状态类中一定含有“状态切换”代码;

策略模式只是简单的在客户端切换策略,核心类(Strategy类)中没有“切换”逻辑。

其实,正是因为第二条,State是Context内在属性,所以有切换逻辑,Strategy是外在东西,所有没有切换逻辑。

所以,存在核心类(State类或Strategy类)切换逻辑的是状态模式,不存在的是策略模式。

 

状态模式:

https://blog.csdn.net/qq_36963950/article/details/102866284

策略模式:

https://blog.csdn.net/qq_36963950/article/details/102866291

 

上一篇:设计模式(二十二)——一文搞懂中介者模式与观察者模式区别