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

  • 相关阅读:
    接竹竿
    Vijos P1053 Easy SSSP
    计算机网络-五层协议和物理层
    代码阅读
    selenium自动化测试原理和设计的分享
    appium desktop 1.7 byName不能用,重写
    appium desktop 1.7 的swipe功能不能用,重写。
    appium在不同类中使用的是同一个session
    GIT 上传、ssh设置、一些命令。
    java 学习:在java中启动其他应用,由jenkins想到的
  • 原文地址:https://www.cnblogs.com/cha1r/p/3454467.html
Copyright © 2011-2022 走看看