【编程素质】设计模式-策略模式
2016-10-20 17:00
267 查看
1,什么是策略模式(Strategy)
(1)概念
定义了算法族,分别封装起来,让它们之间可以互相替换。①也称为政策模式(Policy).
②核心思想就是面向对象编程的多形性的思想.
③是硬编码(Hard Coding)的替换。如查找、排序等,硬编码是在一个类中,提供多个方法,每一个方法对应一个具体的查找算法。如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。在这个算法类中封装了大量查找算法,该类代码复杂,维护困难。如果我们将这些策略包含在客户端,这种做法更不可取,将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重。
(2)场景:
①许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。
② 需要使用一个算法的不同变体。
③算法使用客户不应该知道的数据。
④一个类定义了多种行为 , 这些行为以多个条件语句的形式出现。
例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变体实现为一个算法的类层次时 ,可以使用策略模式。
可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
(3)优缺点
优:让算法的变化独立于使用算法的客户。
2,demo
package strategy; public class Main { public static void main(String[] args){ /*乘坐火车旅行*/ PersonContext person = new PersonContext(new TrainStrategy()); System.out.println( person.travel() ); /*乘飞机*/ person.setTravelStrategy(new AirPlanelStrategy()); System.out.println( person.travel() ); } }
package strategy; public class PersonContext { private TravelStrategy strategy= null; public PersonContext(TravelStrategy strategy){ this.strategy = strategy; } /** * 旅行 */ public void setTravelStrategy(TravelStrategy strategy){ this.strategy = strategy; } public String travel(){ return this.strategy.travelAlgorithm(); } }
package strategy; /** * 抽象策略类(Strategy):定义所有支持的算法的公共接口。 * Context使用这个接口来调用某ConcreteStrategy定义的算法。 * @author luo * */ public interface TravelStrategy { public String travelAlgorithm(); }
package strategy; /** * 具体策略类。实现Strategy接口。 * @author luo * */ public class AirPlanelStrategy implements TravelStrategy{ @Override public String travelAlgorithm(){ return "AirPlanelStrategy"; } }
package strategy; /** * 具体策略类,实现Strategy接口 * @author luo * */ public class TrainStrategy implements TravelStrategy{ @Override public String travelAlgorithm(){ return "TrainStrategy"; } }
相关文章推荐
- 详解Python设计模式编程中观察者模式与策略模式的运用
- 【编程素质】设计模式-观察者模式
- Java设计模式编程中的状态模式和策略模式
- 详解Python设计模式编程中观察者模式与策略模式的运用
- 【编程素质】多线程编程之设计模式
- Android编程设计模式之策略模式详解
- 【编程素质】设计模式-桥接模式
- 从头认识设计模式-策略模式-05-引入设计原则:面向接口编程
- 【编程素质】设计模式-外观模式
- 【编程素质】设计模式-装饰模式:处于安全目的,保护被访问者
- Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
- 对比Java设计模式编程中的状态模式和策略模式
- 【编程素质】设计模式-命令模式
- 【编程素质】设计模式-适配器模式(Adapter)
- 【编程素质】设计模式-单例模式(Singleton pattern)
- 【编程素质】设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能
- 【编程素质】设计模式-其它
- 【编程素质】设计模式-工厂模式:工厂方法、简单工厂、抽象工厂
- [浪子学编程][MS Enterprise Library]ObjectBuilder之设计模式(一):策略模式
- 详解C++设计模式编程中策略模式的优缺点及实现