Head First 设计模式之策略模式与状态模式
一、策略模式
1、策略模式的定义
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
2、策略模式中提到的设计原则
2.1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
2.2、多用组合,少用继承
2.3、针对接口编程,而不是针对实现编程
3、策略模式的类图

4、个人理解
通过这一章的学习,我发现了继承既有好处也有坏处,使用继承可以实现代码复用,但是也体现了他的缺点也就是说并不是说所有的子类都适合继承父类,正如书中提到的橡皮鸭,父类中的飞行行为就不是子类橡皮鸭所需要的,因为橡皮鸭并不会飞。为了解决继承的缺点,我们可以把经常变化的行为提取出来并封装起来通过组合的方式,可以将行为委托给其他类,这就使行为(算法)的变化独立于使用行为(算法)的客户,也体现了有一个(has a)比是一个(is a)更好。
二、状态模式
1、状态模式的定义
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类
2、状态模式的类图

3、个人理解
这个模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,行为会随着内部状态而改变,感觉和策略模式非常的像。
三、策略模式和状态模式的区别
它俩的类图可以说是一模一样,但是它俩的意图并不一样,以状态模式而言,我们将一群行为封装在状态对象中,context的行为随时可委托到那些状态对象中的一个,随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出context内部的状态,因此,context的行为也会跟着改变。但是context的客户对于状态对象了解不多,甚至根本是浑然不觉。而以策略模式而言,客户通常主动指定context所要组合的策略对象是哪一个。
我个人理解他俩的区别在于几点
1、对于状态模式而言客户对于状态对象了解不多,对于策略模式而言客户必须了解策略对象,好指定用哪个策略
2、状态模式context会随着时间而改变自己的状态,任何状态改变都是定义好的,换句话说“改变行为”这件事是建立在我的方案中的
策略模式并没有定义良好的状态转换,事实上,策略模式会去控制是用什么策略

浙公网安备 33010602011771号