阅读 526

细说一下设计模式中的策略模式!

这是我参与新手入门的第3篇文章。

写在前面

Java中的设计模式可分为创建型模式、结构型模式、行为型模式,每一类都包括多个具体的设计模式。

今天我们就来细说一下行为型模式中的策略模式。

策略模式,Strategy Pattern,指一个行为随着策略对象改变而改变,无须使用if-else来进行过多的判断,而是在不同的情况下使用不同的策略;这些策略都实现了同一个接口或者抽象类。

使用场景

策略模式主要应用在业务中具有多种同类型功能时,并且在编写程序时,总是要使用if-else来判断使用哪一类时,就可以使用策略模式。

如计算器,加减乘除四种最基础的运算方式都具有运算机制,所以它们就可以使用策略模式,以此声明出多个策略,通过不同的策略来实现加、减、乘、除四种运算;当然我们目前的运算机制有很多,如果使用策略模式的话,会出现很多策略。

在使用策略模式的时候,还是要权衡一下是不是策略模式能带来的好处多于坏处,有的人会使用工厂模式配合策略模式,这样就直接可以彻底的脱离if-else的束缚。

实现过程

我们接下来针对旅游出行场景实现一下策略模式,代码如下:

  1. LY.java 先实现一个旅游出行接口。
public interface LY {
    //出行方式
    String trip();
}
复制代码
  1. Bicycle.java 实现一个旅游出行自行车类。
/**
 * 自行车
 */
public class Bicycle implements LY{
    @Override
    public String trip() {
        return "骑着自行车,一路没有坡!";
    }
}
复制代码
  1. Hire.java 实现一个旅游出行出租车类。
/**
 * 出租车
 */
public class Hire implements LY{
    @Override
    public String trip() {
        return "打上出租车,路上随便喝!";
    }
}
复制代码
  1. Walk.java 实现一个旅游出行走路类。
/**
 * 走路
 */
public class Walk implements LY{
    @Override
    public String trip() {
        return "要么走断腿,要么走的稳!";
    }
}

复制代码
  1. LYContext.java 实现一个策略转换类。
public class LYContext {

    private LY ly;

    public LYContext(LY ly){
        this.ly = ly;
    }

    /**
     * 方法运行
     */
    public String execute(){
        return ly.trip();
    }
}
复制代码
  1. 现在都实现完了,写个测试类来验证一下。
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());
    }
}
复制代码

运行结果如下图:

image.png

文章分类
后端