• 《重构:改善既有代码的设计》读书笔记5 简化函数调用


    (1)Rename Method 函数改名

    一个真正的编程高手,起名的水平至关重要。

    (2)Add Parameter 添加参数

    (3)Remove Parameter 移除参数

    (4)Separate Query From Modifier 将查询函数和修改函数分离

    某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改。

    范例:(Example)
    
    有这样一个函数:一旦有人入侵安全系统,它会告诉我入侵者的名字,并发送一个警报。如果入侵者不止一个,也只发送一条警报:
    
      String foundMiscreant(String[] people){
    
          for (int i = 0; i < people.length; i++) {
    
              if (people[i].equals ("Don")){
    
                 sendAlert();
    
                 return "Don";
    
              }
    
              if (people[i].equals ("John")){
    
                 sendAlert();
    
                 return "John";
    
              }
    
          }
    
          return "";
    
      }
    
    该函数被下列代码调用:
    
      void checkSecurity(String[] people) {
    
          String found = foundMiscreant(people);
    
          someLaterCode(found);
    
      }

    -》

     String foundPerson(String[] people){
    
           for (int i = 0; i < people.length; i++) {
    
               if (people[i].equals ("Don")){
    
                  return "Don";
    
               }
    
               if (people[i].equals ("John")){
    
                  return "John";
    
               }
    
           }
    
           return "";
    
       }
    
    
      void sendAlert(String[] people){
    
          if (! foundPerson(people).equals(""))
    
              sendAlert();
    
      }
    
      void checkSecurity(String[] people) {
    
          foundMiscreant(people);
    
          String found = foundPerson(people);
    
          someLaterCode(found);
    
      }

    在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier 互相矛盾呢? 我曾经和Doug Lea 讨论过这个问题,并得出结论:两者并不矛盾,但你需要做一 些额外工作。将查询动作和修改动作分开来仍然是很有价值的。但你需要保留第三个函数来同时做这两件事。这个「查询-修改」函数将调用各自独立的查询函数和 修改函数,并被声明为synchronized 时。

  • 相关阅读:
    人民币对美元汇率的大数据分析与预测【完整代码】
    碧瑶答疑网——用户使用手册和反馈
    碧瑶答疑网—系统设计和任务分配
    碧瑶答疑网之选题报告
    碧瑶答疑网-软件需求规格说明书
    UEgCWbGGLA
    https://www.cnblogs.com/ggzjf/
    66666
    继承-代码块-接口
    人民币对澳元汇率的大数据分析与预测
  • 原文地址:https://www.cnblogs.com/zdcsmart/p/12511096.html
Copyright © 2020-2023  润新知