7.策略模式

时间:2019-12-06
本文章向大家介绍7.策略模式,主要包括7.策略模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.平常会遇到这样的事情,完成同一个功能可以使用不同的方式,比如排序,可以使用冒泡排序也可以使用快速排序。策略模式就是符合这样的情况,当完成一件事有多种实现方式,可以根据环境或者其他条件去选择不同的方式去实现。避免了硬编码的方式,扩展和变更更加方便。避免了代码的重复,算的使用和算法的实现分离开。

2.下面以去西藏为例,我们可以选择乘坐火车,骑自行车,步行,这三种方式都可以到达拉萨。我们可以根据不同的的情况灵活选择出行的方式。

3.实现

package com.java.dp.strategy;

/**
 * @Author lizhilong
 * @create 2019/12/5 16:58
 * @desc  出行策略接口
 */
public interface Traffic {

    void trafficType(String name);
}
package com.java.dp.strategy;

/**
 * @Author lizhilong
 * @create 2019/12/5 16:59
 * @desc  火车出行
 */
public class TrainType implements Traffic {
    @Override
    public void trafficType(String name) {
        System.out.println(name+":坐上火车去拉萨");
    }
}
package com.java.dp.strategy;

/**
 * @Author lizhilong
 * @create 2019/12/5 17:01
 * @desc  步行出行
 */
public class WalkType implements Traffic {
    @Override
    public void trafficType(String name) {
        System.out.println(name+":步行去拉萨");
    }
}
package com.java.dp.strategy;

/**
 * @Author lizhilong
 * @create 2019/12/5 17:01
 * @desc 自行车出行
 */
public class BikeType implements Traffic {
    @Override
    public void trafficType(String name) {
        System.out.println(name+":骑上自行车去拉萨");
    }
}
package com.java.dp.strategy;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author lizhilong
 * @create 2019/12/5 17:03
 * @desc  选择出行策略
 */
public class GoToTibet {

    private  static Map<String,Traffic> strategyMap = new HashMap<>();
    static {
        strategyMap.put("小张",new TrainType());
        strategyMap.put("小王",new BikeType());
        strategyMap.put("小李",new WalkType());
    }

    public void chooseTrafficType(String name){
       Traffic traffic = strategyMap.get(name);
       traffic.trafficType(name);
    }
}
package com.java.dp.strategy;

/**
 * @Author lizhilong
 * @create 2019/12/5 17:05
 * @desc
 */
public class StrategyMain {


    public static void main(String[] args) {
        GoToTibet goToTibet = new GoToTibet();

        goToTibet.chooseTrafficType("小张");
        System.out.println("----------------------\n");
        goToTibet.chooseTrafficType("小王");
        System.out.println("----------------------\n");
        goToTibet.chooseTrafficType("小李");
    }
}
小张:坐上火车去拉萨
----------------------

小王:骑上自行车去拉萨
----------------------

小李:步行去拉萨

原文地址:https://www.cnblogs.com/li-zhi-long/p/11994450.html