重构读书笔记-7_5_Hide_Delegate

重构第七章

5.Hide Delegate(隐藏委托)

客户端直接调用server object(服务对象)的delegate class。在server端建立客户端所需的所有函数,用以隐藏委托关系

Example:

class Person {
    Department _department;
    
    public Department getDepartment() {
        return _department;
    }

    public void setDepartment(Department arg) {
        _department = arg;
    }
};

class Department {
    private string _chargeCode;
    private Person _maneger;
    
    public Department(Person manager) {
        _manager = manager;
    }
    public Person getManager() {
        return _manager;
    }
};

Analyse:

上面的示例代码,表示的应该是server object(服务对象)的实现。
用户即客户端希望得到一个Person的Manage。
manager= john.getDepartment().getManager();
用户能通过以上代码,知道Department用来追踪manager的信息。
在Person中建立一个简单的委托函数:
public Person getManager() {
    return _department.getManager();
}

客户端调用修改为:
manager = john.getManager();

End:

class Person {
    Department _department;

    public void setDepartment(Department arg) {
        _department = arg;
    }

    public Person getManager() {
        return _department.getManager();
    }
};

class Department {
    private string _chargeCode;
    private Person _maneger;
    
    public Department(Person manager) {
        _manager = manager;
    }
    public Person getManager() {
        return _manager;
    }
};

Conclusion:

在示例中,如果Person和Department类之间的委托关系发生变化,客户也需要进行相应的变化。
在重构之后,如果Person和Department类之间的委托关系发生变化,客户不需要变化,变化限定在server object中。

同时,可能调用getDepartment的地方有很多处,如果server object 不再提供这个接口,或者这个接口由于一点原因,不在兼容的情况下,可能修改的位置会有很多的地方。
而同一封装在Person中,客户不需要对其代码进行任何的修改,具体的修改内容局限在了server object内,扩展更加的方便。

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • chapter 1 重构,第一个案例 1.1 什么时候需要重构 需要为程序添加一个特性,但代码结构无法使自己方便的...
    VictorBXv阅读 2,089评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,159评论 1 32
  • 一,重构,第一个案例 这一章作者先用一个影片出租程序的案例,来演示重构的过程 每个Customer顾客可以租多部M...
    高稷阅读 10,884评论 1 19
  • 阅读《重构》的笔记献上。 重构的定义 重构是在不改变软件可观察行为的前提下改善其内部结构。 重构的节奏 以微小的步...
    陈宇明阅读 11,691评论 13 64
  • 第一章 重构,第一个案例 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个...
    文浩读书阅读 907评论 0 0