设计模式策略模式之模拟端午回家

Posted lisin-lee-cooper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式策略模式之模拟端午回家相关的知识,希望对你有一定的参考价值。

一.概念

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

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 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

以上是关于设计模式策略模式之模拟端午回家的主要内容,如果未能解决你的问题,请参考以下文章

设计模式工厂模式之模拟公司发放节假日礼品

java设计模式之策略模式

设计模式:HelloWorld之策略模式

设计模式之观察者模式--PHP

第14课:生活中的策略模式——怎么来不重要,人到就行

设计模式之策略模式