Berkat "Analisis Pola Desain Kode Sumber Android dan Praktik Praktis" yang dia pedulikan kepada orang -orang
Mode adaptor sangat berguna dalam pengembangan kami. Ini dapat dinilai dari adaptor yang dapat dilihat di mana -mana dalam kode. Dari ListView paling awal, GridView, dan Recyclerview terbaru, kita semua perlu menggunakan adaptor, dan masalah optimasi dan tempat dengan probabilitas kesalahan yang tinggi yang kita temui dalam pengembangan pada dasarnya berasal dari adaptor.
Adaptor harus menggabungkan dua naga kebakaran yang tidak kompatibel bersama -sama, dan menggunakan transformasi untuk memungkinkan mereka berkolaborasi. Misalnya, sering kali Anda ingin berinteraksi antara dua tipe yang tidak terkait. Solusi pertama adalah memodifikasi antarmuka setiap kelas. Namun, jika tidak ada kode sumber atau kami tidak mau memodifikasi antarmuka masing -masing untuk suatu aplikasi, dalam hal ini, kami sering menggunakan adaptor, yang akan kompatibel kedua antarmuka ini dan memenuhi kebutuhan tanpa memodifikasi kode asli.
Misalkan sudah ada sistem perangkat lunak, dan Anda ingin digunakan dengan perpustakaan kelas pabrikan baru, tetapi antarmuka yang dirancang oleh pabrikan baru ini tidak digunakan untuk antarmuka pabrikan lama:
Apa yang harus Anda lakukan jika Anda tidak ingin mengubah kode yang ada dan menyelesaikan masalah ini (dan Anda tidak dapat mengubah kode pabrikan)? Anda dapat menulis kelas (adaptor) yang mengubah antarmuka vendor baru menjadi antarmuka yang Anda harapkan. Adaptor ini berfungsi seperti perantara, yang mengubah permintaan yang dikeluarkan oleh pelanggan menjadi permintaan yang dapat dipahami oleh kelas vendor.
Mode adaptor dapat dibagi menjadi dua jenis:
Adaptor Objek: Penuh prinsip -prinsip desain OO yang baik. Menggunakan kombinasi objek, ini dapat diterapkan pada adaptor sebagai antarmuka dan semua subclass -nya. Metode adaptor tidak dapat ditulis ulang karena tidak ada hubungan warisan, tetapi juga dapat "menerapkan kembali" metode dalam adaptor. Klien dan adaptor sama sekali tidak relevan, dan hanya adaptor yang memiliki referensi ke adaptor.
Adaptor kelas: Gunakan warisan untuk mencapai pekerjaan adaptor. Hanya adaptor yang merupakan antarmuka, dan tidak dapat menggunakan antarmuka subkelasnya. Ketika adaptor kelas ditetapkan, secara statis terkait dengan adaptor. Adaptor berfungsi sebagai kelas dasar adaptor, sehingga adaptor dapat menulis ulang metode dalam adaptor. Kode klien terlihat oleh kode yang dinyatakan dalam adaptor. Kode klien terlihat oleh kode yang dinyatakan dalam adaptor.
definisi:
Pola adaptor mengubah antarmuka satu kelas menjadi antarmuka lain yang diharapkan klien, sehingga dua kelas yang awalnya tidak dapat bekerja bersama karena ketidakcocokan antarmuka dapat bekerja bersama.
Gunakan skenario:
1. Sistem perlu menggunakan kelas yang ada, dan antarmuka seperti itu tidak memenuhi kebutuhan sistem, yaitu, antarmuka tidak sesuai.
2. Ingin membuat kelas yang dapat digunakan kembali untuk bekerja dengan beberapa kelas yang tidak terlalu terkait satu sama lain, termasuk beberapa kelas yang dapat diperkenalkan di masa depan.
3. Antarmuka output terpadu diperlukan, dan jenis ujung input tidak dapat diprediksi.
Diagram Kelas UML:
Pandangan pertama pada adaptor berikut:
Adapter kelas mengimplementasikan konversi antarmuka dengan mengimplementasikan antarmuka target dan mewarisi kelas adapte. Misalnya, antarmuka target membutuhkan operasi2, tetapi objek adapte hanya memiliki satu operasi3, sehingga ada situasi yang tidak kompatibel. Pada saat ini, fungsi Operation2 diimplementasikan melalui adaptor untuk mengonversi Operasi Adaptee3 menjadi Operasi2 yang diperlukan oleh Target, untuk mencapai kompatibilitas.
Target: Peran target, yaitu antarmuka yang Anda cari. Catatan: Karena pola adaptor kelas dibahas di sini, target tidak bisa menjadi kelas.
Adaptee: Antarmuka yang diadaptasi sekarang diperlukan.
Adaptor: Peran adaptor juga merupakan inti dari mode ini. Adaptor mengubah antarmuka sumber menjadi antarmuka target. Peran ini tidak bisa menjadi antarmuka, tetapi harus menjadi kelas tertentu.
Contoh mode adaptor kelas:
Ambil tegangan daratan adalah 220V dan tegangan ponsel adalah 5V sebagai contoh
/** * Target Target Kelas Tegangan * Administrator @Author * */Voltase Antarmuka Publik {public int getVoltage ();} kelas publik ChinaVoltage mengimplementasikan voltage {@override int getVoltage () {// voltase benua adalah 220 pengembalian 220; }} <pre name = "code">/** * kelas ponsel, kelas adaptor adaptee * @author administrator * */kelas publik phonevoltage {/** * tegangan ponsel adalah 5v * @return */public int getPhonevoltage () {return 5; }} <name pre = "code">/** * Charger Adapter Administrator * */Charger kelas publik memperluas phoneVoltage mengimplementasikan voltage {@Override int getVoltage () {return getPhonevoltage (); }} klien kelas publik {public static void main (string [] args) {chinavoltage vol = new chinavoltage (); System.out.println ("Tegangan daratan adalah:" + vol.getVoltage ()); // tegangan saat menghubungkan pengisi daya ke karakter chargerr ponsel = chargerr baru (); System.out.println ("Tegangan dikonversi melalui pengisi daya:" + karakter.getVoltage ()); }} Hasil Menjalankan:
Tegangan di daratan Cina adalah: 220
Tegangan dikonversi melalui pengisi daya: 5
Mari kita lihat diagram kelas adaptor objek:
Berikut ini adalah untuk memodifikasi kelas chargerr menggunakan adaptor objek
<pre name = "code">/** * Administrator adaptor charger * */kelas publik Chargerr mengimplementasikan voltage {private phonevoltage phonev; Public Chargerr (phonevoltage phonev) {this.phonev = phonev; } @Override public int getVoltage () {return phonev.getphonevoltage (); }}Metode implementasi adaptor objek secara langsung melewati objek yang akan diadaptasi menjadi adaptor, dan menggunakan bentuk gabungan untuk mencapai efek kompatibilitas antarmuka. Ini lebih fleksibel daripada metode adaptor kelas. Keuntungan lain adalah bahwa metode dalam objek yang diadaptasi tidak akan diekspos. Karena adaptor kelas mewarisi objek yang diadaptasi, fungsi kelas objek yang diadaptasi juga terkandung dalam kelas adaptor, yang membuat kelas adaptor memiliki beberapa antarmuka yang aneh, yang lebih hemat biaya bagi pengguna. Oleh karena itu, mode adaptor objek lebih fleksibel dan praktis.
Klien Kelas Publik {public static void main (string [] args) {// chinavoltage vol = new chinavoltage (); // system.out.println ("Tegangan daratan adalah:" + vol.getVoltage (); // voltage saat menghubungkan telepon dengan charger // chargerr charger (); Charger: " + karakter.getVoltage ()); // phonevoltage phonev = phonevoltage baru (); Chargerr charger = chargerr baru (phonev); System.out.println ("Tegangan dikonversi melalui pengisi daya:" + charger.getVoltage ()); } // Hasil operasi: // tegangan dikonversi melalui pengisi daya: 5} Meringkaskan:
Implementasi klasik dari model adaptor adalah mengintegrasikan antarmuka yang awalnya tidak kompatibel sehingga mereka dapat bekerja sama dengan baik. Namun, dalam pengembangan aktual, model adaptor juga memiliki beberapa implementasi yang fleksibel. Misalnya, perubahan isolasi dalam ListView membuat seluruh arsitektur UI lebih fleksibel dan dapat merangkul perubahan. Model adaptor banyak digunakan dalam pengembangan.
keuntungan:
Penggantian Ulang yang Lebih Baik: Sistem perlu menggunakan kelas yang ada, dan antarmuka tersebut tidak memenuhi kebutuhan sistem. Maka fungsi -fungsi ini dapat digunakan kembali dengan lebih baik melalui mode adaptor.
Skalabilitas yang lebih baik: Saat menerapkan fungsi adaptor, Anda dapat memanggil fungsi yang Anda kembangkan sendiri untuk memperluas fungsi sistem secara alami.
kekurangan:
Terlalu banyak penggunaan adaptor akan membuat sistem ini sangat berantakan dan sulit dipahami. Misalnya, antarmuka Chang A yang dipanggil sebenarnya disesuaikan dengan implementasi antarmuka B. Jika ada terlalu banyak kasus ini dalam suatu sistem, itu sama saja dengan bencana. Oleh karena itu, jika tidak perlu, adaptor dapat digunakan alih -alih refactoring sistem secara langsung.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.