• 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));
        }
    
  • 相关阅读:
    换装WIN10(windows)那点儿事,换装操作系统一文通,玩转安装操作系统
    Win10永久版低价购买及激活工具使用说明
    Win10系统自带软件删除和恢复工具
    微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换
    扫描全能王 v5.13.0.20190916 去水印和广告版
    Vue组件
    vue自定义过滤器的创建和使用
    vue自定义指令的创建和使用
    vue的基础使用
    vue的概述
  • 原文地址:https://www.cnblogs.com/haocang/p/12693636.html
Copyright © 2020-2023  润新知