设计模式:生活中的策略模式

文章目录

策略模式可以通过日常生活中的出行规划来类比。假设你需要从家到达一个目的地,你有多种出行方式可供选择,比如开车、骑自行车、乘坐公共交通或步行。每种出行方式可以看作是一个策略,而你的目的是要选择一个最优的策略来达到目的地。

出行方式:策略对象

在出行规划的例子中,每种出行方式(开车、骑自行车、乘坐公共交通、步行)都是一个策略。它们各自有不同的成本、时间和舒适度。

选择出行方式:策略选择

你根据当天的天气、交通状况、个人健康状态和时间安排等因素来选择最合适的出行方式。这个决策过程类似于在策略模式中根据上下文选择最合适的策略。

出行规划者:上下文

出行规划者(你)需要考虑所有的因素,并在所有可用的出行方式中选择一个最优的。在策略模式中,上下文(Context)就是执行策略选择的角色。

代码实现类比

如果我们把这个类比转换成代码,那么可以这样来实现:

java 复制代码
// 策略接口
interface TravelStrategy {
    void travelToDestination();
}

// 具体策略类:开车
class CarTravelStrategy implements TravelStrategy {
    public void travelToDestination() {
        System.out.println("Traveling to destination by car.");
    }
}

// 具体策略类:骑自行车
class BikeTravelStrategy implements TravelStrategy {
    public void travelToDestination() {
        System.out.println("Traveling to destination by bike.");
    }
}

// 具体策略类:乘坐公共交通
class PublicTransportStrategy implements TravelStrategy {
    public void travelToDestination() {
        System.out.println("Traveling to destination using public transport.");
    }
}

// 具体策略类:步行
class WalkStrategy implements TravelStrategy {
    public void travelToDestination() {
        System.out.println("Walking to destination.");
    }
}

// 上下文
class TravelContext {
    private TravelStrategy strategy;

    public void setTravelStrategy(TravelStrategy strategy) {
        this.strategy = strategy;
    }

    public void travel() {
        strategy.travelToDestination();
    }
}

// 客户端代码
public class StrategyPatternExample {
    public static void main(String[] args) {
        TravelContext context = new TravelContext();

        // 假设今天天气晴朗,选择骑自行车
        context.setTravelStrategy(new BikeTravelStrategy());
        context.travel();

        // 如果开始下雨,改为乘坐公共交通
        context.setTravelStrategy(new PublicTransportStrategy());
        context.travel();
    }
}

类比总结

通过这个出行规划的类比,我们可以更深入地理解策略模式:

  • 策略的多样性:就像出行方式有很多种,策略模式允许在不同的算法间自由切换。
  • 上下文的决策:出行规划者(上下文)根据当前的情况选择最合适的出行方式,类似于策略模式中上下文的作用。
  • 策略的封装:每种出行方式的具体实现是封装的,主要关注点是到达目的地,这与策略模式中的策略封装相对应。
  • 策略的替换:策略模式允许在运行时根据不同情况更换策略,就像你可以根据天气变化选择不同的出行方式一样。

策略模式强调了算法的可替换性和上下文在选择策略时的灵活性。

相关推荐
Carl_奕然2 小时前
【智能体】Agent的四种设计模式之:ReAct
人工智能·设计模式·语言模型
二哈赛车手4 小时前
新人笔记---多策略搭建策略执行链实现RAG检索后过滤
java·笔记·spring·设计模式·ai·策略模式
楼田莉子4 小时前
仿Muduo的高并发服务器:Channel模块与Poller模块
linux·服务器·c++·学习·设计模式
geovindu20 小时前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
嵌入式学习_force1 天前
02_state
设计模式·蓝牙
jimy11 天前
一个夜间期权交易策略的评价
策略模式·程序员创富
qcx231 天前
Warp源码深度解析(七):Token预算策略——双轨计费、上下文溢出与摘要压缩
人工智能·设计模式·rust·wrap
Cosolar2 天前
提示词工程面试题系列 - Zero-Shot Prompting 和 Few-Shot Prompting 的核心区别是什么?
人工智能·设计模式·架构
geovindu2 天前
go:Template Method Pattern
开发语言·后端·设计模式·golang·模板方法模式
钝挫力PROGRAMER2 天前
贫血模型的改进
java·开发语言·设计模式·架构