策略模式的思考
来源:互联网 发布:淘宝主图视频pr 编辑:程序博客网 时间:2024/05/16 18:05
实际情况中,经常遇到对同一件事情有多个处理策略的时候,比如现在从武汉到北京,就有海陆空三种策略,都能达到目的。
针对上述情况,初学的时候我们可能采取如下方式实现:
public class ChooseStrategy {public void GoByAir(){System.out.println("乘坐飞机");}public void GoByShip(){System.out.println("乘坐轮船");}public void GoByTrain(){System.out.println("乘坐火车");}//根据不同的条件选择不同的策略前往目的地public void GoToDestination(int condition){switch(condition){case 0:GoByAir();break;case 1:GoByShip();break;case 2:GoByTrain();break;}}public static void main(String[] args) {ChooseStrategy choose=new ChooseStrategy();choose.GoToDestination(0);}}这样就可以根据不同的条件选择不同的方式前往目的,但是考虑到程序的变更,当我们需要增加新的策略的时候需要手动的增加case语句和新的方法,下面采用策略模式对比实现上面的功能。
采用策略模式,需要提供一个StrategyContext类,该类用于为客户端代码选择合适的折扣策略,也可以让客户端修改自己需要的策略。其UML如下图:
代码实现如下:
public class StrategyContext {private Strategy strategy;public void GoToDestination(){//如果策略为空默认采用一种策略 乘坐飞机if(strategy==null){strategy=new AirStrategy();}strategy.GoToDestination();}//更改策略public void ChangeStrategy(Strategy strategy){this.strategy=strategy;}public static void main(String[] args) {StrategyContext context=new StrategyContext();context.GoToDestination();context.ChangeStrategy(new TrainStrategy());context.GoToDestination();}}如此,当我们需要增加策略的时候只需要增加一个类继承Strategy接口同时程序的代码并不直接依赖于具体的某个实现策略,只是依赖于策略的选择类StrategyContext类,这就是策略模式。
思考,当我们使用hibernate的时候会使用hibernateTemplate或则hsql而不去管数据库的具体实现,当我们需要使用mySql的时候需要指定数据库的方言Dialect为MySql,使用Oracle或者SqlServer的时候也只需要修改Dialect不需要修改sql语句,不就是策略模式带来的好处吗,同样的数据源Resource的使用也是如此。
0 0
- 策略模式的思考
- 项目问题的思考之策略模式
- 策略模式的解读与思考
- 策略模式、上下文与内部类的思考
- 设计模式学习[1]--大话设计模式中的工厂模式和策略模式的思考
- 项目问题思考之策略模式
- 设计模式与泡mm的关系之strategy策略模式及再思考
- 从头认识设计模式-策略模式-06-对前面几个章节思考的总结
- 从头认识设计模式-策略模式-04-思考过程三:引入设计原则:分离变化与不变的部分
- 婚姻模式的思考
- 工厂模式的思考
- real 模式的思考
- 设计模式的思考
- 对于模式的思考
- 装饰模式的思考
- 设计模式的思考
- 观察者模式的思考
- 设计模式的思考
- 字符串处理
- 做项目时,在jsp页面获得项目的相对路径
- hdu 2642(比较裸的二维树状数组)
- 如何使用js像html的table标签中添加一行
- Android: 一个两点触控的案例
- 策略模式的思考
- 地图坐标纠偏及投影转换的常见算法
- Linux CentOS 6.5中安装与配置Tomcat-8方法
- 关于deeping learning概括(1,MIT学生,2,百度,余凯)
- 【译】1.教程介绍【django CMS】
- awk学习笔记-2
- MyISAM以及InnoDB引擎默认排序方式
- 【OJ】总结ACM编程易错点
- Linux core 文件介绍