赞
踩
Encapsulates interchangeable behaviors and use delegation to decide which one to use.
定义了算法族,分别封装起来,让它们之间可以互相替换。
此模式让算法的变化独立于使用算法的客户,由客户决定什么情况下使用具体策略角色。
体现的设计原则:
1)封装变化
2)针对接口编程而不是实现
3)多用组合,少用继承
使用场景:
1)许多相关类只是在行为上不同,可以动态地在许多行为中选择一种行为。
2)动态地在几种算法中选择一种。
3)避免暴露复杂的、特定用于算法的数据结构。
4)类定义了很多表现为多个条件语句的行为,应将分支移到各自策略类中。
Encapsulates state-based behaviors and use delegation to switch between behaviors.
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
体现的设计原则:
1)单一职责原则——专门用一个状态类来表示状态。
2)开闭原则——增加状态需求修改负责状态转换的源代码,否则无法切换到新状态。
3)针对接口编程,而不是实现·。
使用场景:
1)行为随状态改变而改变。
2)条件、分支语句的替代者。
Q 对比策略模式、状态模式。
1)状态模式要对客户透明。策略模式不能对客户透明。
2)状态模式的行为封装在状态对象中,当前状态在状态对象中游走改变,以反映出context内部的状态,客户不关心具体状态以及状态转换过程。策略模式常常是客户根据环境或条件的不同主动指定context所要组合的策略对象是哪一个,可在运行时改变策略方案,具有弹性。
3)状态模式可作为条件判断语句的替代。策略模式可作为继承之外的弹性替代方案。
4)状态模式是某个类的对象由多种状态且不同状态下行为有差异。策略模式是某类的某行为有多种实现方式。
Wraps an object to provide new behavior.
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
利用继承达到类型匹配,组合对象产生新行为。
以客户端透明的方式扩展对象功能。
体现的设计原则:开闭原则——对扩展开放,对修改关闭。
优点:灵活、动态、解耦
缺点:产生很多小对象,装饰比继承更容易出错且排错困难。
应用:扩展一个类的功能、动态增加或撤销功能。
Subclasses decide how to implement steps in an algorithm.
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
使子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
工厂模式+模板方法模式:在工厂中使用模板方法模式。
模板方法设为final,防止被修改。
体现的设计原则:开闭原则、单一职责原则、好莱坞原则。
hook()钩子:默认不做事的方法,子类视情况要不要覆盖它,可减轻抽象类的子类负荷。
若算法该部分可选就用钩子,必须实现就用抽象方法。
1)让子类实现算法中的可选部分,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。