zoukankan      html  css  js  c++  java
  • 重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)

    客户通过一个委托类来调用另一个对象。
    在服务类上建立客户所需的所有函数,用以隐藏委托关系。

    动机:
    封装即使不是对象的最关机特性,也是最关机特性之一。“封装”意味着每个对象都应该少了解系统的其他部分。如此以来,一旦发生变化,需要了解这一变化的就比较少---这会使系统比较容易进行。

    任何学过对象技术的人都知道:虽然Java将字段声明为public,但你还是应该隐藏对象的字段。随着经验日渐丰富,你会发现,有更多可以(值得)封装的东西。
    如果某个客户需要通过服务对象的字段得到另一个对象,然后调用后者的函数,那么客户就必须知晓这一层委托关系。万一委托关系发生变化,那么客户也得相应变化。你可以在服务对象上放置一个简单的委托函数,将委托关系隐藏起来,从而去除这种依赖。这么以来即使将来发生魏国关系上的变化,变化也将被限制在服务对象中,不会波及客户。

    范例:
    本例从两个类开始:代表“人”的Person类和代表“部门”的Department类。
    class Person{
    Department _department;
    public Department getDepartment(){
    reutrn _department;
    }
    public void setDepartment(Department department){
    _department=department;
    }
    }

    class Department{
    private String _chargeCode;
    private Person _manager;
    public Department(Person manager){
    _manager=manager;
    }
    public Person getManager(){
    return _manager;
    }
    }
    ..............
    如果客户需要知道某一个人的经理是谁,他必须先取得Department对象:
    manager=john.getDepartment().getManager();
    这样编码就对客户暴露了Department的工作原理,于是客户知道,Department用于追踪“经理”这条信息。如果对客户隐藏Department,可以减少耦合。为了这一目的,
    可以在Person类中建立一个简单的委托函数:
    public Person getManager(){
    return _department.getManager();
    }
    现在,修改Person的所有客户,让他们改用新函数:
    manager=john.getManager();
    只要完成了对Department所有函数的委托关系,并修改了相应Person的所有客户,那么就可以移除Person中的访问函数getDepartment()了。

  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/pony1223/p/7563529.html
Copyright © 2011-2022 走看看