java设计模式之策略模式
如果存在一种行为在多种情况下的实现,一般情况下可能会使用if...else if...else..
来实现。但是每增加一种情况就要增加一种if判断,这样不符合java设计的规范,这时,就可以使用策略模式来替换这种繁琐的if..else
策略设计模式是行为设计模式的一种.当使用多种算法(条件)解决一个特殊的任务的时候,由客户端决定使用哪种具体算法进行特定的实现时,可以使用策略模式.
哪种情况会使用策略模式
以下情况可以使用策略模式:
- 许多相关类只有行为上有所不同,策略模式可以通过相同的行为方法(接口方法)来配置这些类.
- 当需要使用到算法的变种的时候,当定义不同的行为参数,如果使用类的层次结构实现的时候,可以使用策略模式(当使用方法层次结构的时候就是多态)
- 客户端不用清楚算法的细节实现,只需关注接口.避免暴露具体的类的实现、特殊算法的数据结构.
- 一个类定义了多种不同的行为,并且使用杂乱的条件进行判断具体使用哪一个条件,这时候就可以使用策略模式来代替,对不同的策略形成不同的类.可以清晰的表达出类的作用与实现的行为方式.
策略模式结构
如上图定义一个总的Traffic
接口,里面有一个go()
方法.使用car
和walk
两种策略(算法)分别来实现接口.
Context
类是环境类,持有一个TrafficStrategy
的引用,隐藏具体的策略接口的实现,让客户端专注于方法的调用.
代码实现
策略模式接口和策略的实现类:
1 | public interface TrafficStrategy { |
context类:
1 | public class Context { |
App客户端类:
1 | public class App { |