Seseorang mungkin menghadapi senario di mana mengalih keluar pergantungan "rakan" antara dua kelas adalah dikehendaki, terutamanya disebabkan kebimbangan tentang saling bergantung yang berlebihan, isu penyelenggaraan dan UML yang sudah lapuk standard.
Ekstrak kaedah yang didedahkan oleh kelas "rakan" dan cipta antara muka abstrak baharu. Wujudkan perhubungan pergantungan daripada kelas "rakan" ke antara muka dan pergantungan "panggilan" daripada kelas lain ke antara muka.
Alihkan operasi yang membentuk pergantungan "panggilan" daripada kelas bergantung kepada antara muka abstrak. Jadikan antara muka memanjangkan pembina yang dilindungi untuk tujuan pewarisan dan sembunyikan persatuan generalisasi yang dilindungi antara kelas bergantung dan antara muka.
Dalam langkah terakhir, cipta kaedah dalam kelas "rakan" untuk menghantar rujukan antara muka abstrak kepada kelas bergantung. Panggil kaedah ini daripada kelas bergantung semasa pemulaan untuk mewujudkan sambungan yang diperlukan.
KelasA (penyedia):
<code class="cpp">class ClassA : protected InternalInterface { public: attachAccessor(ClassAAccessor &accessor) { accessor.setInternalInterfaceRef(*this); } };</code>
ClassAAccessor (rakan):
<code class="cpp">class ClassAAccessor { public: ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) { classA.attachAccessor(*this); } private: InternalInterface* internalInterfaceRef; };</code>
Atas ialah kandungan terperinci Bagaimana untuk Memfaktorkan Semula Perisytiharan Ketergantungan \'Rakan\': Panduan Langkah demi Langkah untuk Mengeluarkan Saling Kebergantungan yang Berlebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!