背景
策略模式和状态模式的UML类图是完全一样的,那他们的区别在哪里呢?
区别主要在于行为上,而不是结构上
策略模式
策略是外界给的,策略怎么变,是调用者考虑的事情,系统只是根据所给的策略做事情
通常用于让外界自主选择需要的策略
状态模式
状态是系统自身的固有的,由系统本身控制,调用者不能直接指定或改变系统的状态转移
通常用于内部状态流转,状态流程是固定的
对比
一个策略是一个计划或方案,可以相互替代;状态整体构成一个流程,各个流程有一定的顺序
采用何种策略由外界(客户端)决定;状态的变迁是由对象的内部条件决定,外界只关心其接口,不必关心其对象的创建和转化