zoukankan      html  css  js  c++  java
  • 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("小李");
        }
    }
    小张:坐上火车去拉萨
    ----------------------
    
    小王:骑上自行车去拉萨
    ----------------------
    
    小李:步行去拉萨
  • 相关阅读:
    如何让你的Sublime和Codeblocks支持C++11
    Python print不换行输出的替代方法
    阶梯博弈
    hdu4633_Polya定理
    Ural_1169_Pairs
    ACM竞赛中的魔方问题专题(不定时更新)
    LintCode 35. 翻转链表
    windows中mysql5.7中配置中文字符集和默认datadir
    CentOS7使用打开关闭防火墙与端口
    关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/11994450.html
Copyright © 2011-2022 走看看