zoukankan      html  css  js  c++  java
  • 利用模板重构重复代码。

    今天写代码的时候遇上了一个稍微有点不舒服的问题,我描述一下场景:

    代码发生在View层,首先大部分方法在执行之前都会检查一下是否登录,但是有少部分是不用登录的。而这些登录与不用登录的代码完全没必要分开两个方法,因为代码80%是相同的。所以这就需要做一个判断+提示

        private void doSomething(){
            //判断登陆
          ...
    //如果没登陆,提示登录。
          ...
    }

    那么我们会很自觉地把判断+提示抽成一个方法

        private void doSomething(){
            //判断登陆+提示
            ...
        }

    但是有一些不用登录的方法怎么办?加if?

        private void doSomething(){
            if(有登陆){
                //判断登陆+提示
                ...
            }else{
                //....
            }
        }

    那么如果我有100个业务方法,那上面这种代码就有一百行了。。有一些还不止,可能登陆后还要继续判断用户是男是女执行什么动作...这样的代码

        private void doSomething(){
            if(有登陆){
                //判断登陆+提示
                ...
                if(男人){
                    
                }else if(女人){
                    
                }
            }else{
                //....
                if(男人){
                    
                }else if(女人){
                    
                }
            }
        }

    大量出现这种极其难看的代码肯定是不行的。。但是我们可以利用模板,把这些代码变成只有一份:

    private void doSomethingTemplate(PersonDo executor){
            if(有登陆){
                //判断登陆+提示
                ...
                if(男人){
                    executor.manDo(obj); 
                    System.out.println("有登陆");
                }else if(女人){
                    executor.womenDo(obj);
                    System.out.println("有登陆");
                }
            }else{
                //....
                if(男人){
                    executor.manDo(obj);
                    System.out.println("没登陆");
                }else if(女人){
                    executor.womenDo(obj);
                    System.out.println("没登陆");
                }
            }
        }

    那么我们调用模板的时候,只需要实现一个匿名类,实现对应方法,传入即可

        private void doSomething(){
            doSomethingTemplate(new PersonDo(){
                @Override
                public void manDo(Object obj){
                    //...do 
                    System.out.println("i am man");
                }
                @Override
                public void womenDo(Object obj){
                    //...do 
                    System.out.println("i am women");
                }
            });
        }

    最后介绍个学习网站:Here

  • 相关阅读:
    JS循环语句作业讲解(折纸、兔子生兔子、买东西组合)
    JavaScript If...Else 语句
    一个用纯CSS实现的下拉菜单
    form表单练习
    CSS样式表
    form表单的属性标签
    form表单的属性标签和练习
    HTML基础标签入门
    学习目标
    Oracle表格建立
  • 原文地址:https://www.cnblogs.com/cha1r/p/3454467.html
Copyright © 2011-2022 走看看