• 利用模板重构重复代码。


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

    代码发生在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

  • 相关阅读:
    https://bbs.ichunqiu.com/thread-48915-1-1.html
    如何利用GitHub搜索敏感信息
    PHP7CMS 无条件前台GETSHELL
    S-CMS企建v3二次SQL注入
    浅析PHP正则表达式的利用技巧
    WPF中获得控件相对于控件的相对位置
    WPF 获得鼠标相对于屏幕的位置,相对于控件的位置
    WPF中设置快捷键
    Wpf 中使用gif格式的动态图
    安装window服务
  • 原文地址:https://www.cnblogs.com/cha1r/p/3454467.html
Copyright © 2020-2023  润新知