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

  • 相关阅读:
    在Linux服务器上添加ip白名单允许ssh登录访问
    crontab + shell脚本实现文件重命名
    mysql数据库提示ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    附加题2:中文编程的发展角度
    附加题1:实体店的未来存在形式
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/cha1r/p/3454467.html
Copyright © 2011-2022 走看看