• 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("小李");
        }
    }
    小张:坐上火车去拉萨
    ----------------------
    
    小王:骑上自行车去拉萨
    ----------------------
    
    小李:步行去拉萨
  • 相关阅读:
    Linux概念与体系阅读笔记
    iOS缓存
    iOS开发笔记系列-基础3(多态、动态类型和动态绑定)
    在进入新版本 的时候,进行推送引导
    手机号验证
    通过UIView对象获取该对象所属的UIViewController(转)
    支付宝和微信支付的各种填坑
    IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
    iOS 注册登录页面
    多媒体元素的使用
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/11994450.html
Copyright © 2020-2023  润新知