zoukankan      html  css  js  c++  java
  • Separate Query From Modify(将查询函数和修改函数分离)

    //重构前    
    String foundMiscreant(String[] people){
            for (int i = 0; i<people.length; i++){
                if (people[i].equals("Dom")){
                    sendAlert();
                    return "Dom";
                }
    
                if (people[i].equals("John")){
                   sendAlert();
                   return "John";
                }
            }
            return "";
        }
    
        private void sendAlert() {
            System.out.println("发出一条警告");
        }
    
        public static void main(String[] args) {
            Before before = new Before();
            String[] people = new String[3];
            people[0] = "Dom";
            people[1] = "Dom";
            people[2] = "Dom";
            System.out.println(before.foundMiscreant(people));
        }
    
     String foundPeople(String[] people){
            //1.先建立一个适当的查询函数,使其与修改函数返回相同的值,但不造成任何副作用
            for (int i = 0; i<people.length; i++){
                if (people[i].equals("Dom")){
                    return "Dom";
                }
    
                if (people[i].equals("John")){
                    return "John";
                }
            }
            return "";
        }
    
        String foundMiscreant(String[] people){
            //2.把原函数内所有的return语句,改调用新建的查询函数
            for (int i = 0; i<people.length; i++){
                if (people[i].equals("Dom")){
                    sendAlert();
                    return foundPeople(people);
                }
    
                if (people[i].equals("John")){
                    sendAlert();
                    return foundPeople(people);
                }
            }
            return foundPeople(people);
        }
    
        private void sendAlert() {
            System.out.println("发出一条警告");
        }
    
        public static void main(String[] args) {
            //3.修改调用函数,将原本单一调用,修改为两个调用
            After1 after1 = new After1();
            String[] people = new String[3];
            people[0] = "Dom";
            people[1] = "Dom";
            people[2] = "Dom";
            after1.foundMiscreant(people);
            System.out.println(after1.foundPeople(people));
        }
    
    String foundPeople(String[] people){
            for (int i = 0; i<people.length; i++){
                if (people[i].equals("Dom")){
                    return "Dom";
                }
    
                if (people[i].equals("John")){
                    return "John";
                }
            }
            return "";
        }
    
        void foundMiscreant(String[] people){
            //4.将原函数改为返回void,删除所有return语句
            for (int i = 0; i<people.length; i++){
                if (people[i].equals("Dom")){
                    sendAlert();
                    return;
                }
    
                if (people[i].equals("John")){
                    sendAlert();
                    return;
                }
            }
        }
    
        private void sendAlert() {
            System.out.println("发出一条警告");
        }
    
        public static void main(String[] args) {
            After2 after2 = new After2();
            String[] people = new String[3];
            people[0] = "Dom";
            people[1] = "Dom";
            people[2] = "Dom";
            after2.foundMiscreant(people);
            System.out.println(after2.foundPeople(people));
        }
    
  • 相关阅读:
    微信小程序开发常用方法
    HTML5 video常用属性
    移动端键盘定制
    移动端弹性滑动以及滑动出界解决方案
    vue移动端Ui组件 mint-ui 使用指南
    vue.js的ajax和jsonp请求
    获取用户地理位置
    如何将一个已有的项目托管到github或是码云上?git的配置
    mvvm模式和mvc模式 概述总结对比
    使用Java的BlockingQueue实现生产者-消费者
  • 原文地址:https://www.cnblogs.com/haocang/p/12693636.html
Copyright © 2011-2022 走看看