设计模式-极品飞车-【策略模式】
2013-04-09 10:45
246 查看
【策略模式应用场景举例】
比如在玩“极品飞车”这款游戏,那么游戏对车的轮胎是可以更换的,不同的轮胎在高速转弯时有不同的痕迹样式,那么针对“汽车”的配件“轮胎”就要可以变化,而且轮胎和轮胎之间是可以相互替换的,这就是典型的要应用“策略模式”的场景!从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。
【策略模式解释】
类型:行为模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
【策略模式UML图】
【策略模式-JAVA代码实现】
从策略模式UML图中可以看到Context与接口Strategy是组合关系,即强引用关系。
新建一个轮胎接口:
package strategy_interface; public interface tyre_interface { // tyre 轮胎 public void print_tyre_line();// 显示出轮胎的痕迹 } |
package strategy_implement; import strategy_interface.tyre_interface; //长痕迹轮胎类 public class tyre_long_implement implements tyre_interface { public void print_tyre_line() { System.out.println("在路面上显示一个长轮胎痕迹"); } } |
package strategy_implement; import strategy_interface.tyre_interface; //短痕迹轮胎类 public class tyre_short_implement implements tyre_interface { public void print_tyre_line() { System.out.println("在路面上显示一个短轮胎痕迹"); } } |
组装一个Car车类:
package car_package; import strategy_interface.tyre_interface; public class Car { private String make_address;// 制造地 private int death_year;// 报废年限 private int speed;// 速度 private tyre_interface tyre_interface_ref;// 轮胎的样式 public String getMake_address() { return make_address; } public void setMake_address(String make_address) { this.make_address = make_address; } public int getDeath_year() { return death_year; } public void setDeath_year(int death_year) { this.death_year = death_year; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public tyre_interface getTyre_interface_ref() { return tyre_interface_ref; } public void setTyre_interface_ref(tyre_interface tyre_interface_ref) { this.tyre_interface_ref = tyre_interface_ref; } public void start() { System.out.println("车的基本信息为:"); System.out.println("制造地make_address:" + this.getMake_address()); System.out.println("报废年限death_year:" + this.getDeath_year()); System.out.println("速度speed:" + this.getSpeed()); System.out.println("Car 起动了!"); System.out.println("Car高速行驶,遇到一个大转弯,路面显示:"); this.getTyre_interface_ref().print_tyre_line(); } } |
package main_run; import strategy_implement.tyre_long_implement; import strategy_implement.tyre_short_implement; import car_package.Car; public class run_main { public static void main(String[] args) { tyre_long_implement tyre_long_implement = new tyre_long_implement(); tyre_short_implement tyre_short_implement = new tyre_short_implement(); Car car = new Car(); car.setDeath_year(8); car.setMake_address("北京朝阳区"); car.setSpeed(200); car.setTyre_interface_ref(tyre_long_implement); car.start(); } } |
车的基本信息为: 制造地make_address:北京朝阳区 报废年限death_year:8 速度speed:200 Car 起动了! Car高速行驶,遇到一个大转弯,路面显示: 在路面上显示一个长轮胎痕迹 |
【策略模式-MyEclipse6项目JAVA代码实现】
策略模式strategy示例代码:点击
相关文章推荐
- 设计模式-极品飞车-【代理模式】
- 设计模式-极品飞车-【外观模式】
- 设计模式-极品飞车-【原型模式】
- 设计模式-极品飞车-【模板方法模式】
- 关于java设计模式与极品飞车游戏的思考
- 设计模式-极品飞车-【工厂方法模式】
- 关于java设计模式与极品飞车游戏的思考
- 设计模式-极品飞车-【建造者模式】
- 设计模式-极品飞车-【观察者模式】
- 设计模式-极品飞车-【抽象工厂模式】
- 设计模式-极品飞车-【装饰模式】
- java设计模式之——策略模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 【设计模式 - 22】之策略模式(Strategy)
- Java设计模式(5)——策略模式
- java 设计模式-策略模式
- 【设计模式-策略模式】
- JAVA设计模式之策略模式
- 设计模式——策略模式
- 设计模式学习总结(一)策略模式Strategy Pattern