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());
}
}
运行结果如下图:
作者:墨三十一
链接:https://juejin.cn/post/6983686664367390757
来源:掘金
网友评论