如何在保留设计的同时删除好友声明
在面向对象设计中使用“friend”关键字可以创建紧密的依赖关系并妨碍可维护性。本文提供了一种在保留系统整体设计的同时删除友元声明的综合方法。
问题背景:
考虑一个场景,其中两个类 ClassA 和ClassAAccessor,有朋友关系。 ClassA 表示具有受保护方法的共享资源,而 ClassAAccessor 则充当管理对此资源的访问的帮助程序。 ClassA 和 ClassAAccessor 之间的友元关系允许 ClassAAccessor 直接访问 ClassA 的受保护方法。
设计约束:
为了确保正确重构,设置了几个约束:
重构步骤:
第1步:引入抽象接口
提取之前可以通过好友访问的操作关系到一个称为InternalInterface 的单独接口。重构ClassA和ClassAAccessor之间的关系,使其依赖于该接口,而不是使用friend关键字。
第2步:将操作移至接口
将操作从A 类到内部接口。这消除了从 ClassAAccessor 直接到 ClassA 的“调用”依赖。
第 3 步:粘合实现在一起
在 ClassAAccessor 中创建一个指向以下实例的私有成员变量内部接口。在ClassA中引入一个方法,允许设置该成员变量,使得ClassAAccessor能够访问所需的内部操作。
实现示例:
<code class="cpp">class ClassAAccessor { public: ClassAAccessor(ClassA& classA); void setInternalInterfaceRef(InternalInterface & newValue) { internalInterfaceRef = &newValue; } private: InternalInterface* internalInterfaceRef; }; class ClassA : protected InternalInterface { public: attachAccessor(ClassAAccessor & accessor); };</code>
的优点重构:
重构的缺点:
以上是如何在不影响设计的情况下删除好友声明?的详细内容。更多信息请关注PHP中文网其他相关文章!