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));
    }
posted @ 2020-04-13 20:11  传统教育有毒  阅读(318)  评论(0编辑  收藏  举报