策略设计模式:
- 需要有若干策略实现,每一个策略是一个接口的子实现
- 把接口作为类型的属性,或者把接口作为方法的参数
- 回调函数
- 组合属性,组合方法的参数
- 多态
- 程序的移植性高,扩展性高,维护性高
策略模式设计举例:
removeIf(Predicate接口);
线程 Thread t=new Thread(Runnable接口)
策略设计模式定义: 定义一组算法,将算法封装起来,使他们可以互换
策略设计模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.
策略设计模式的结构:
封装类: 也叫上下文,对从策略进行二次封装,目的是避免高层模块对策略的直接调用
抽象策略:通常是一个接口,当各个实现类中存在重复逻辑时,则使用抽象类来封装这部分公共的代码
具体策略: 具体策略角色通常是由一组封装了算法的类来担任,这些类之间可以根据需要自由替换
优点:
- 策略类之间可以自由切换,由于策略类实现自同一个抽象,所以他们之间可以自由切换
- ‘易于扩展,增加新的策略对策略模式来说十分容易,基本上可以再不改变源代码的基础上进行扩展
- 避免使用多重条件,如果不使用策略模式,对于所有算法,必须使用条件语句进行连接,通过条件判断执行那种算法’
缺点:
- 维护各个策略类会给开发带来额外开销,策略类越多,就令人头大
- 必须对客户端(调用者)暴露所有的策略类,因为客户端决定调用那种策略,所以应该知道都存在什么策略,并且了解各种策略之间的区别,否则喉管很严重
策略设计模式的实质就是面向对象的继承和多态,