在网上摘抄了一些比较经典的案例:
下面做个总结:
策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
如: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。
又如: 在玩“极品飞车”这款游戏,那么游戏对车的轮胎是可以更换的,不同的轮胎在高速转弯时有不同的痕迹样式,那么针对“汽车”的配件“轮胎”就要可以变化,而且轮胎和轮胎之间是可以相互替换的,这就是典型的要应用“策略模式”的场景!从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。
就那极品飞车举个例子:
1,新建一个轮胎接口:
package coreJava.strategy2.tyre_interface;
public interface Tyre_Interface {
public void print_tyre_line();//显示出轮胎的痕迹
}
2,新建轮胎接口的两个不同的实现类(长痕迹轮胎和短痕迹轮胎):
package coreJava.strategy2.tyre_longimpl;
import coreJava.strategy2.tyre_interface.Tyre_Interface;
public class Tyre_LongImpl implements Tyre_Interface {
@Override
public void print_tyre_line() {
System.out.println("在路上留下了\"长长\"的痕迹...");
}
}
package coreJava.strategy2.tyre_shortimpl;
import coreJava.strategy2.tyre_interface.Tyre_Interface;
public class Tyre_ShortImpl implements Tyre_Interface{
@Override
public void print_tyre_line() {
System.out.println("在路上留下了\"短短\"的痕迹...");
}
}
3,组装一个Cart车类:
package coreJava.strategy2.cart;
import coreJava.strategy2.tyre_interface.Tyre_Interface;
public class Cart {
private String address;
private int death_year;
private int speed;
private Tyre_Interface tyre_interface;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = 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() {
return tyre_interface;
}
public void setTyre_interface(Tyre_Interface tyre_interface) {
this.tyre_interface = tyre_interface;
}
public void start(){
System.out.println("车辆的基本信息为:");
System.out.println("生产地址:"+this.address);
System.out.println("使用年限为:"+this.death_year);
System.out.println("车启动了...");
System.out.println("速度为"+this.speed);
System.out.println("车加速行驶中....\n车转了一个弯:");
this.tyre_interface.print_tyre_line();
}
}
4,让车跑起来,并让车有更换轮胎的功能:
package coreJava.strategy2.main_run;
import coreJava.strategy2.cart.Cart;
import coreJava.strategy2.tyre_interface.Tyre_Interface;
import coreJava.strategy2.tyre_longimpl.Tyre_LongImpl;
import coreJava.strategy2.tyre_shortimpl.Tyre_ShortImpl;
public class Main {
public static void main(String[] args) {
Tyre_Interface tyre_longImpl = new Tyre_LongImpl();
Tyre_Interface tyre_shortImpl = new Tyre_ShortImpl();
Cart cart = new Cart();
cart.setAddress("北京海淀");
cart.setDeath_year(20);
cart.setSpeed(10);
cart.setTyre_interface(tyre_shortImpl);
cart.start();
System.out.println("\n\n\n\n");
System.out.println("车换轮胎了:");
cart.setTyre_interface(tyre_longImpl);
cart.start();
}
}
执行程序之后,在控制台打印出:
车辆的基本信息为:
生产地址:北京海淀
使用年限为:20
车启动了...
速度为10
车加速行驶中....
车转了一个弯:
在路上留下了"短短"的痕迹...
车换轮胎了:
车辆的基本信息为:
生产地址:北京海淀
使用年限为:20
车启动了...
速度为10
车加速行驶中....
车转了一个弯:
在路上留下了"长长"的痕迹...
这样在不改变cart类的前提下改变了车的轮胎的类型,轮胎和轮胎之间可以互相替换,这就是策略模式.