23种设计模式-java-策略模式

本文介绍策略模式的应用,如何在地图应用中根据用户选择实时切换自驾、公交和步行导航策略。通过策略基类与具体策略类的配合,实现算法的动态替换,提升代码灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式概述:

能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。

使用场景:

1.当你想使用对象中各种不同的算法变体, 并希望能在运行时切换算法时, 可使用策略模式。
2.当你有许多仅在执行某些行为时略有不同的相似类时, 可使用策略模式。
3.如果算法在上下文的逻辑中不是特别重要, 使用该模式能将类的业务逻辑与其算法实现细节隔离开来。
4.当类中使用了复杂条件运算符以在同一算法的不同变体中切换时, 可使用该模式。

代码样例:

代码背景: 在地图上输入起点和终点,点击生成导航路线;根据客户端选择的不同策略生成不同的导航路线,包括自驾、公交、步行等。

/**
 * 策略基类
 */
public interface Strategy {
    String createRoute(String start,String end);
}
/**
 * 自驾策略
 */
public class ByCarStrategy implements Strategy{

    @Override
    public String createRoute(String start, String end) {
        return new String("北京路直行2公里,左拐进入上海路,直行300到达目的地");
    }
}
/**
 * 公交策略
 */
public class ByBusStrategy implements Strategy{

    @Override
    public String createRoute(String start, String end) {
        return new String("天安门站坐1路公交车,上海站换成2路公交车,天津路下车到达目的地");
    }
}
/**
 * 步行策略
 */
public class ByFootStrategy implements Strategy{

    @Override
    public String createRoute(String start, String end) {
        return new String("当前直行100米到达中央公园,穿越中央花园右拐进入上海路,沿着上海路直行200米到达目的地");
    }
}
/**
 * 上下文
 */
public class Context {
    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public String excute(String start,String end){
        if(strategy ==null) strategy = new ByCarStrategy();//默认自驾策略
        return strategy.createRoute(start,end);
    }
}
public class TestStrategy {
    public static void main(String[] args) {
        String type = args[0];
        Context context = new Context();

        if ("car".equals(type)) context.setStrategy(new ByCarStrategy());
        else if("bus".equals(type)) context.setStrategy(new ByBusStrategy());
        else if("foot".equals(type)) context.setStrategy(new ByFootStrategy());
        System.out.println(context.excute("地球","火星"));
    }
}

调用入参使用foot:进行调用:
在这里插入图片描述

调用结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值