قد يواجه المرء سيناريو حيث تكون إزالة تبعية "صديق" بين فئتين المرغوب فيه، لا سيما بسبب المخاوف بشأن الاعتماد المتبادل المفرط، وقضايا الصيانة، ومعايير UML القديمة.
استخرج الأساليب التي كشفت عنها فئة "الصديق" وأنشئ واجهة مجردة جديدة. إنشاء علاقة تبعية من فئة "الصديق" إلى الواجهة وتبعية "استدعاء" من الفئة الأخرى إلى الواجهة.
نقل العمليات التي تشكل تبعية "الاستدعاء" من الفئة التابعة إلى الواجهة المجردة. اجعل الواجهة توسع مُنشئًا محميًا لأغراض الميراث وإخفاء ارتباط التعميم المحمي بين الفئة التابعة والواجهة.
في الخطوة الأخيرة، قم بإنشاء طريقة في فئة "الصديق" لتمرير مرجع الواجهة المجردة إلى الفئة التابعة. قم باستدعاء هذه الطريقة من الفئة التابعة أثناء التهيئة لتأسيس الاتصال اللازم.
ClassA (المزود):
class ClassA : protected InternalInterface {
public:
attachAccessor(ClassAAccessor &accessor) {
accessor.setInternalInterfaceRef(*this);
}
};
ClassAAccessor (صديق):
class ClassAAccessor { عام: ClassAAccessor(ClassA& classA) : InternalInterfaceRef(0) { classA.attachAccessor(*this); } خاص: InternalInterface* InternalInterfaceRef; };class ClassAAccessor {
public:
ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
classA.attachAccessor(*this);
}
private:
InternalInterface* internalInterfaceRef;
};
يزيل التبعية غير الضرورية بين الفئاتتنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3