Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengalih Keluar Pengisytiharan Rakan Tanpa Mengkompromi Reka Bentuk?
Cara Mengeluarkan Perisytiharan Rakan Semasa Memelihara Reka Bentuk
Penggunaan kata kunci "rakan" dalam reka bentuk berorientasikan objek boleh mewujudkan kebergantungan yang ketat dan menghalang kebolehselenggaraan. Artikel ini menyediakan pendekatan menyeluruh untuk mengalih keluar pengisytiharan rakan sambil mengekalkan reka bentuk keseluruhan sistem.
Latar Belakang Masalah:
Pertimbangkan senario di mana dua kelas, ClassA dan ClassAAccessor, mempunyai hubungan rakan. ClassA mewakili sumber yang dikongsi dengan kaedah yang dilindungi, manakala ClassAAccessor berfungsi sebagai pembantu untuk mengurus akses kepada sumber ini. Hubungan rakan antara ClassA dan ClassAAccessor membolehkan ClassAAccessor mengakses secara langsung kaedah yang dilindungi ClassA.
Kekangan Reka Bentuk:
Untuk memastikan pemfaktoran semula yang betul, beberapa kekangan ditetapkan:
Langkah Pemfaktoran Semula:
Langkah 1: Memperkenalkan Antara Muka Abstrak
Ekstrak operasi yang sebelum ini boleh diakses melalui rakan perhubungan ke dalam antara muka berasingan yang dipanggil Antaramuka Dalaman. Faktorkan semula hubungan antara ClassA dan ClassAAccessor untuk menjadikannya bergantung pada antara muka ini dan bukannya menggunakan kata kunci rakan.
Langkah 2: Alihkan Operasi ke Antara Muka
Alihkan operasi dari KelasA kepada Antaramuka Dalaman. Ini menghapuskan kebergantungan "panggilan" daripada ClassAAccessor terus ke ClassA.
Langkah 3: Gam Pelaksanaan Bersama
Buat pembolehubah ahli persendirian dalam ClassAAccessor yang menunjukkan contoh Antaramuka Dalaman. Memperkenalkan kaedah dalam ClassA yang membenarkan menetapkan pembolehubah ahli ini untuk membolehkan ClassAAccessor mengakses operasi dalaman yang diperlukan.
Contoh Pelaksanaan:
<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>
Kelebihan Pemfaktoran semula:
Kelemahan Pemfaktoran Semula:
Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Pengisytiharan Rakan Tanpa Mengkompromi Reka Bentuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!