7.策略模式

Posted li-zhi-long

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("----------------------
");
        goToTibet.chooseTrafficType("小王");
        System.out.println("----------------------
");
        goToTibet.chooseTrafficType("小李");
    }
}
小张:坐上火车去拉萨
----------------------

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

小李:步行去拉萨

 

以上是关于7.策略模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-策略模式详解

java设计模式7.策略模式模板方法模式观察者模式

设计模式—— 策略模式

Java 策略模式

Java 策略模式

Java 策略模式