zoukankan      html  css  js  c++  java
  • 简单优化 if else

    简单优化 if else

    1、 阿里编程归约

    if语句使用“卫语句 ”减少层级嵌套。

    一脸的大写的懵逼,“卫语句”是什么东东?赶紧找度妈。

    卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.

    if(obj != null){
      doSomething();
    }
     
    //转换成卫语句以后的代码如下:
    if(obj == null){
       return;
    }
    doSomething();
    

    卫语句的好处是条件表达式之间相互独立,不会互扰。

    2、数组

    场景:定义一个方法,获取星期数。

    private static String getWeekDay(int weekStat) {
        if (0 == weekStat) {
            return "星期天";
        }
        if (1 == weekStat) {
            return "星期一";
        }
        if (2 == weekStat){
            return "星期二";
        }
        if (3 == weekStat){
            return "星期三";
        }
        if (4 == weekStat){
            return "星期四";
        }
        if (5 == weekStat){
            return "星期五";
        }
        if (6 == weekStat){
            return "星期六";
        }
        return null;
    }
    
    // 使用该方法获取星期六
    System.out.println(getWeekDay(6));
    

    使用数组优化:

    String[] week = {
        "星期天",
        "星期一",
        "星期二",
        "星期三",
        "星期四",
        "星期五",
        "星期六"
    };
    
    // 使用数组获取星期六
    System.out.println(week[6])
    

    3、策略设计模式

    3.1 枚举实现

    定义一个枚举类:

    /**
     * 定义了一周的每一天要干什么
     */
    enum WeekDay {
        /**星期天要作甚?*/
        Sunday("Sunday"){
            @Override
            void weekRun() {
                System.out.println(weekName + ":和朋友出去玩!");
            }
        },
        /**星期1要作甚?*/
        Monday("Monday"){
            @Override
            void weekRun() {
                System.out.println(weekName + ":在学校学习英语");
            }
        },
        /**星期2要作甚?*/
        Tuesday("Tuesday"){
            @Override
            void weekRun() {
                System.out.println(weekName + ":在学校学习java");
            }
        },
        /**星期3要作甚?*/
        Wednesday("Wednesday"){
            @Override
            void weekRun() {
                System.out.println(weekName + ":在学校学习语文");
            }
        },
        /**星期4要作甚?*/
        Thursday("Thursday"){
            @Override
            void weekRun() {
                System.out.println(weekName + ":在学校学习历史");
            }
        },
        /**星期5要作甚?*/
        Friday("Friday"){
            @Override
            void weekRun() {
                System.out.println(weekName + "在学校玩");
            }
        },
        /**星期6要作甚?*/
        Saturday("Saturday"){
            @Override
            void weekRun() {
                System.out.println(weekName + "和朋友在家看电影");
            }
        };
    
        public String weekName;
        abstract void weekRun();
        WeekDay(String weekName){
            this.weekName = weekName;
        }
    }
    

    使用该枚举类:

    public class Demo {
        public static void main(String[] args) {
            // 调用的写法1
            WeekDay.valueOf("Sunday").weekRun();
            // 调用的写法2
            WeekDay.Monday.weekRun();
        }
    }
    

    3.2 多态实现

    抽象一个跑的行为

    /**
     * 跑的行为抽象
     */
    @FunctionalInterface
    interface RunStrategy {
        void run();
    }
    

    针对该行为抽象,有几种实现:

    /**
     * 人跑的行为
     */
    class PeopleRunStrategy implements RunStrategy {
        @Override
        public void run() {
            System.out.println("人用腿跑");
        }
    }
    
    /**
     * 汽车跑的行为
     */
    class CarRunStrategy implements RunStrategy {
    
        @Override
        public void run() {
            System.out.println("汽车用轮子跑");
        }
    }
    
    /**
     * 鱼跑的行为
     */
    class FishRunStrategy implements RunStrategy {
    
        @Override
        public void run() {
            System.out.println("鱼在水里游");
        }
    }
    

    使用映射来调用:

    Map<String, RunStrategy> runStrategyMap = new HashMap<>(16);
    runStrategyMap.put("people", new PeopleRunStrategy());
    runStrategyMap.put("car", new CarRunStrategy());
    runStrategyMap.put("fish", new FishRunStrategy());
    
    // 获取汽车的跑的实现,当没有该实现时,调用人的跑的实现
    RunStrategy runStrategy1 = runStrategyMap.getOrDefault("car", new PeopleRunStrategy());
    // 获取鸟的跑的实现,当没有该实现时,调用人的跑的实现
    RunStrategy runStrategy2 = runStrategyMap.getOrDefault("bird", new PeopleRunStrategy());
    // 打印:汽车用轮子跑
    runStrategy1.run();
    // 打印:人用腿跑
    runStrategy2.run();
    
    

    4、 状态设计模式

    抽象状态行为接口:

    /**
     * Created by Feng on 2020/1/4 11:37<br>
     *     抽象状态行为:定义不同状态对应的方法
     *     方法的实现由其实现类完成
     */
    @FunctionalInterface
    interface State {
        void handle();
    }
    

    具体的状态类:

    /**
     * 具体的状态类:空闲状态
     */
    class FreeState implements State {
    
        @Override
        public void handle() {
            System.out.println("闲着就写代码!!");
        }
    }
    
    /**
     * 具体的状态类:繁忙状态
     */
    class BusyState implements State {
    
        @Override
        public void handle() {
            System.out.println("忙了还得写代码!!!");
        }
    }
    

    State 上下文:

    /**
     * 在环境中维护一个抽象状态类 State 的实例,这个实例定义当前状态。
     * 还可以定义初始状态
     */
    class Context {
        private State state;
    
        /**
         * 设置状态:调用handle方法
         */
        public void setState(State state){
            this.state = state;
            state.handle();
        }
    
        public State getState(){
            return state;
        }
    }
    

    测试:

    /**
     * 客户端:测试
     */
    public class ContextClient {
        public static void main(String[] args) {
            Context context = new Context();
            context.setState(new FreeState());
            context.setState(new BusyState());
        }
    }
    

    测试结果:

    1. 闲着就写代码!!
    2. 忙了还得写代码!!!
  • 相关阅读:
    "Key Violation" with ClientDataSet
    c# 的关键字 params,out,ref
    eval && JSON.parse
    json2.js
    C#中的索引器
    call , apply , caller , callee
    iphone&ipad图标去除高亮的光圈效果
    调用系统路线导航
    调科大讯飞出现的问题
    得到汉字首字母在表中的顺序位置
  • 原文地址:https://www.cnblogs.com/cchilei/p/13470639.html
Copyright © 2011-2022 走看看