【设计模式】【行为型】策略模式之模拟端午回家

一.概念

1.1 概念
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

1.2 结构

策略模式的主要角色如下:
抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
环境(Context)类:持有一个策略类的引用,最终给客户端调用

二.场景

马上就是端午小长假了,大家应该早已坐不住了,心早已飞向远方了,怎么回家呢,临近这个点我估计在座的各位早已做好了充分的准备,虽然过程不一样,结果都是从一个城市去往另一个城市,选择看起来很多,其实也不过 飞机,火车,小汽车这几种供你选择。
所以你的端午回家方式是什么,距离多远呢,欢迎评论留言。

三 类图及代码实现

3.1 类图

策略模式类图

3.2 代码实现

3.2.1 回程方式接口

public interface Trip<T> {

    String doGo(T seat);

}

3.2.2 直接起飞

public class Aircraft implements Trip<Map<String, String>> {

    @Override
    public String doGo(Map<String, String> seat) {
        String cabin = seat.get("cabin");
        String price = seat.get("price");
        return "尊敬的贵宾,您乘坐的是:" + cabin + ",一共花费:" + price;
    }
    
}

3.2.3 和谐号搞起

public class Train implements Trip<String> {

    @Override
    public String doGo(String distance) {
        return "尊敬的和谐号乘客,本次旅程全程:" + distance;
    }

}

3.2.4 同行顺风车

public class Car implements Trip<String> {
    @Override
    public String doGo(String time) {
        return "尊敬的顺风车乘客,本次旅程全程:" + time;
    }
}

3.2.5 策略控制类

public class StrategyContext<T> {

    private Trip<T> trip;

    public StrategyContext(Trip<T> trip) {
        this.trip = trip;
    }

    public String doGo(T msg) {
        return trip.doGo(msg);
    }

}

四.测试验证

4.1测试验证类

public class StrategyMain {

    public static void main(String[] args) {

        StrategyContext<Map<String, String>> aircraft = new StrategyContext<>(new Aircraft());
        Map<String, String> seat = new HashMap<>();
        seat.put("cabin", "头等舱");
        seat.put("price", "1500RMB");
        String aircraftResult = aircraft.doGo(seat);
        System.out.println(aircraftResult);

        StrategyContext<String> train = new StrategyContext<>(new Train());
        String trainResult = train.doGo("670km");
        System.out.println(trainResult);

        StrategyContext<String> car = new StrategyContext<>(new Car());
        String carResult = car.doGo("10h");
        System.out.println(carResult);

    }

}

4.1测试结果

尊敬的贵宾,您乘坐的是:头等舱,一共花费:1500RMB
尊敬的和谐号乘客,本次旅程全程:670km
尊敬的顺风车乘客,本次旅程全程:10h

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值