首页 >后端开发 >C++ >如何在不影响设计的情况下删除好友声明?

如何在不影响设计的情况下删除好友声明?

Patricia Arquette
Patricia Arquette原创
2024-11-04 13:20:301000浏览

How to Remove a Friend Declaration Without Compromising Design?

如何在保留设计的同时删除好友声明

在面向对象设计中使用“friend”关键字可以创建紧密的依赖关系并妨碍可维护性。本文提供了一种在保留系统整体设计的同时删除友元声明的综合方法。

问题背景:

考虑一个场景,其中两个类 ClassA 和ClassAAccessor,有朋友关系。 ClassA 表示具有受保护方法的共享资源,而 ClassAAccessor 则充当管理对此资源的访问的帮助程序。 ClassA 和 ClassAAccessor 之间的友元关系允许 ClassAAccessor 直接访问 ClassA 的受保护方法。

设计约束:

为了确保正确重构,设置了几个约束:

  • ClassAAccessor 的公共接口应保持不变。
  • ClassA 的内部操作应保持私有。
  • 性能和内存消耗不应受到显着影响。

重构步骤:

第1步:引入抽象接口

提取之前可以通过好友访问的操作关系到一个称为InternalInterface 的单独接口。重构ClassA和ClassAAccessor之间的关系,使其依赖于该接口,而不是使用friend关键字。

第2步:将操作移至接口

将操作从A 类到内部接口。这消除了从 ClassAAccessor 直接到 ClassA 的“调用”依赖。

第 3 步:粘合实现在一起

在 ClassAAccessor 中创建一个指向以下实例的私有成员变量内部接口。在ClassA中引入一个方法,允许设置该成员变量,使得ClassAAccessor能够访问所需的内部操作。

实现示例:

<code class="cpp">class ClassAAccessor {
public:
    ClassAAccessor(ClassA&amp; classA);
    void setInternalInterfaceRef(InternalInterface &amp; newValue) {
        internalInterfaceRef = &amp;newValue;
    }
private:  
    InternalInterface* internalInterfaceRef;
};

class ClassA : protected InternalInterface {
public:
    attachAccessor(ClassAAccessor &amp; accessor);
};</code>

的优点重构:

  • 消除 ClassA 和 ClassAAccessor 之间的紧密依赖。
  • 确保对 ClassA 内部操作的私有访问。
  • 提供更加模块化和可维护的设计.

重构的缺点:

  • 增加了代码结构的复杂性。
  • 由于引入附加接口。
  • 对受保护的泛化关系的有限 UML 支持。

以上是如何在不影响设计的情况下删除好友声明?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn