Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memfaktorkan Semula Perisytiharan Ketergantungan \"Rakan\": Panduan Langkah demi Langkah untuk Mengeluarkan Saling Kebergantungan yang Berlebihan?

Bagaimana untuk Memfaktorkan Semula Perisytiharan Ketergantungan \"Rakan\": Panduan Langkah demi Langkah untuk Mengeluarkan Saling Kebergantungan yang Berlebihan?

DDD
DDDasal
2024-11-05 10:02:02365semak imbas

How to Refactor a

Cara Memfaktorkan Semula Perisytiharan Ketergantungan "rakan"

Latar Belakang

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.

Langkah 1: Perkenalkan Antara Muka Abstrak

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.

Langkah 2: Alihkan Operasi 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.

Langkah 3: Gam Pelaksanaan Bersama

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.

Pelaksanaan

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>

Kelebihan

  • Menghapuskan pergantungan yang tidak perlu antara kelas
  • Mematuhi piawaian UML moden
  • Menguatkuasakan akses kawalan dengan menyembunyikan operasi dalaman daripada awam

Batasan

  • Boleh meningkatkan kerumitan kod
  • Memerlukan antara muka abstrak, mempengaruhi prestasi dan jejak memori
  • Perwakilan UML bagi generalisasi yang dilindungi perhubungan boleh mencabar

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn