• 重构改善既有代码设计--重构手法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()了。

  • 相关阅读:
    100以内整数四则运算
    软件工程基础
    使用python分析微信好友
    数据库实践
    爬虫
    Python编程预测比赛成绩
    自己的第一个网页
    科学计算与可视化
    对小学生四则运算用界面呈现
    在使用memory_profiler检测python代码运行时内存出现解码错误
  • 原文地址:https://www.cnblogs.com/pony1223/p/7563529.html
Copyright © 2020-2023  润新知