我是靠谱客的博主 淡定冥王星,最近开发中收集的这篇文章主要介绍《重构:改善既有代码的设计》 在对象之间搬移特性  之 5,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

《重构:改善既有代码的设计》中提到过很多重构方法,关于在对象之间搬移特性的方法有8种。本文介绍:
隐藏“委托关系”  hide delegate

  • 名称: 隐藏“委托关系”  hide delegate
  • 概要:客户通过一个委托来调用另一个对象。在服务类上建立 客户所需的所有函数,用以隐藏委托关系。
  • 动机:每个对象都应该尽量少的了解系统的其他部分

  • 做法:
    • 对于每一个委托关系中的函数,在服务对象端建立一个简单的委托函数
    • 调整客户,令它只调用服务对象提供的函数
    • 每次调整后,编译并测试
    • 如果将来不再有任何客户需要取用delegate(受托类),便可移除服务对象中的相关访问函数
    • 编译,测试
  • 代码演示

修改之前的代码:

///.h
#ifndef REFACTORMOVE_H
#define REFACTORMOVE_H

class Department;
class Person
{
public:
    QString GetName();
    QString GetOfficeAreaCode();
    void SetOfficeAreaCode(QString officeAreaCode);
    Department* GetDepartment();
    void SetDepartment(Department *pdepartment);

private:
    QString m_Name;
    QString m_OfficeAreaCode;
    TelephoneNumber m_TelephoneNumber;
    Department *m_pDepartment;
};
class Department
{
public:
    Department(Person manager);
    Person GetManager();
private:
    QString m_ChargeCode;
    Person m_Manager;
};
#endif // REFACTORMOVE_H

///.cpp

Department* Person::GetDepartment()
{
    return m_pDepartment;
}

void Person::SetDepartment(Department *pdepartment)
{
    m_pDepartment = pdepartment;
}

Department::Department(Person manager)
{
    m_Manager = manager;
}

Person Department::GetManager()
{
    return m_Manager;
}
///main.cpp
    Person person;
    Department department(person);
    Person manager = person.GetDepartment()->GetManager();

如果客户希望指导某人的经理是谁,他必须要先取得Department对象。
manager = person.GetDepartment()->GetManager();
这样的编码就是对客户揭露了Department的工作原理。如果对客户隐藏Department,可以减少耦合。
于是,在Person中建立一个简单的委托函数。
修改之后的代码:

///.h
#ifndef REFACTORMOVE_H
#define REFACTORMOVE_H

class Person
{
public:
Person GetManager();
};

#endif // REFACTORMOVE_H

///.cpp
#include "RefactorMove.h"
Person Person::GetManager()
{
    return m_pDepartment->GetManager();
}
///main.cpp
    Person person;
    Department department(person);
    Person manager = person.GetManager();

最后

以上就是淡定冥王星为你收集整理的《重构:改善既有代码的设计》 在对象之间搬移特性  之 5的全部内容,希望文章能够帮你解决《重构:改善既有代码的设计》 在对象之间搬移特性  之 5所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部