人们可能会遇到这样的场景:删除两个类之间的“friend”依赖关系是期望的,特别是由于对过度相互依赖、维护问题和过时的 UML 标准的担忧。
提取“朋友”类公开的方法并创建一个新的抽象接口。建立从“朋友”类到接口的依赖关系以及从其他类到接口的“调用”依赖关系。
移动操作构成从依赖类到抽象接口的“调用”依赖关系。使接口扩展受保护的构造函数以实现继承目的,并隐藏依赖类和接口之间受保护的泛化关联。
最后一步,创建一个方法在“friend”类中将抽象接口的引用传递给依赖类。在初始化期间从依赖类调用此方法以建立必要的连接。
ClassA (provider):
class ClassA : protected InternalInterface {
public:
attachAccessor(ClassAAccessor &accessor) {
accessor.setInternalInterfaceRef(*this);
}
};
ClassAAccessor (朋友):
class ClassAAccessor {
public:
ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
classA.attachAccessor(*this);
}
private:
InternalInterface* internalInterfaceRef;
};
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3