写在前面
Java中的设计模式可分为创建型模式、结构型模式、行为型模式,每一类都包括多个具体的设计模式。
今天我们就来细说一下行为型模式中的策略模式。
策略模式,Strategy Pattern,指一个行为随着策略对象改变而改变,无须使用if-else来进行过多的判断,而是在不同的情况下使用不同的策略;这些策略都实现了同一个接口或者抽象类。
使用场景
策略模式主要应用在业务中具有多种同类型功能时,并且在编写程序时,总是要使用if-else来判断使用哪一类时,就可以使用策略模式。
如计算器,加减乘除四种最基础的运算方式都具有运算机制,所以它们就可以使用策略模式,以此声明出多个策略,通过不同的策略来实现加、减、乘、除四种运算;当然我们目前的运算机制有很多,如果使用策略模式的话,会出现很多策略。
在使用策略模式的时候,还是要权衡一下是不是策略模式能带来的好处多于坏处,有的人会使用工厂模式配合策略模式,这样就直接可以彻底的脱离if-else的束缚。
实现过程
我们接下来针对旅游出行场景实现一下策略模式,代码如下:
- LY.java 先实现一个旅游出行接口。
public interface LY { //出行方式 String trip(); }
- Bicycle.java 实现一个旅游出行自行车类。
/** * 自行车 */ public class Bicycle implements LY{ @Override public String trip() { return "骑着自行车,一路没有坡!"; } }
- Hire.java 实现一个旅游出行出租车类。
/** * 出租车 */ public class Hire implements LY{ @Override public String trip() { return "打上出租车,路上随便喝!"; } }
- Walk.java 实现一个旅游出行走路类。
/** * 走路 */ public class Walk implements LY{ @Override public String trip() { return "要么走断腿,要么走的稳!"; } }
- LYContext.java 实现一个策略转换类。
public class LYContext { private LY ly; public LYContext(LY ly){ this.ly = ly; } /** * 方法运行 */ public String execute(){ return ly.trip(); } }
- 现在都实现完了,写个测试类来验证一下。
public class Test1 { public static void main(String[] args) { LYContext lyContext = new LYContext(new Hire()); System.out.println(lyContext.execute()); lyContext = new LYContext(new Walk()); System.out.println(lyContext.execute()); lyContext = new LYContext(new Bicycle()); System.out.println(lyContext.execute()); } }
运行结果如下图: