definisi
Mode adaptor (adaptor) adalah untuk mengonversi antarmuka (metode atau atribut) kelas (objek) menjadi antarmuka lain (metode atau atribut) yang diinginkan pelanggan. Mode adaptor memungkinkan kelas -kelas (objek) yang awalnya tidak dapat bekerja bersama karena ketidakcocokan antarmuka. Pembungkus cepat.
Alias untuk adaptor adalah pembungkus, yang merupakan pola yang relatif sederhana. Ada banyak skenario seperti itu dalam pengembangan program: Ketika kami mencoba memanggil antarmuka modul atau objek, kami menemukan bahwa format antarmuka ini tidak memenuhi persyaratan saat ini. Ada dua solusi saat ini. Yang pertama adalah memodifikasi implementasi antarmuka asli, tetapi jika modul asli sangat rumit, atau modul yang kami dapatkan adalah kode terkompresi yang ditulis oleh orang lain, memodifikasi antarmuka asli tidak realistis. Metode kedua adalah membuat adaptor dan mengubah antarmuka asli menjadi antarmuka lain yang diinginkan pelanggan. Pelanggan hanya perlu berurusan dengan adaptor.
Mengapa Anda perlu menggunakan mode adaptor?
Saat mengembangkan aplikasi, Anda sering perlu mengganti bagiannya, misalnya, perpustakaan yang Anda gunakan untuk memegang log atau konten serupa. Saat Anda menggantinya dengan perpustakaan baru, tidak mungkin perpustakaan baru memiliki antarmuka yang sama persis. Dari sini, Anda memiliki dua opsi:
(1) Periksa semua kode dan ubah semua kode yang menunjuk ke perpustakaan lama.
(2) Buat adaptor sehingga perpustakaan baru dapat menggunakan antarmuka yang sama dengan perpustakaan lama.
Jelas, dalam beberapa kasus, jika aplikasi Anda kecil, atau ada beberapa referensi ke perpustakaan lama, lebih tepat untuk memeriksa kode lengkap dan mengubahnya agar sesuai dengan perpustakaan baru daripada menambahkan lapisan abstraksi baru untuk membuat kode lebih rumit. Namun, dalam kebanyakan kasus, menciptakan adaptor lebih praktis dan hemat waktu.
Contoh Kode JavaScript
Ketika sesuatu bisa terjadi, itu pasti akan terjadi. Pertama mari kita lihat LoggerFactory kecil ini, yang memungkinkan kita untuk memodifikasi antarmuka log yang kita gunakan dengan lebih mudah.
var loggerFactory = {getLogger: function () {return window.console; }, ...};/* Contoh penggunaan*/var logger = loggerFactory.getLogger (); logger.log ("Sesuatu untuk log");Ketika kami menelepon GetLogger, ia mengembalikan objek konsol (konsol). Untuk latihan ini, kami berpura -pura bahwa objek konsol hanya memiliki satu metode - log, dan hanya dapat menerima satu parameter tipe string. Selanjutnya, kami memiliki antarmuka log lain, yang akan lebih rumit karena 1) diimplementasikan dalam JavaScript, tidak seperti konsol, yang bukan browser itu sendiri; 2) Ini akan mengirim log ke server melalui AJAX, yang juga berarti bahwa kita harus menyandikan data URL (kode tidak akan secara khusus menerapkan hal -hal terkait pengkodean URL, karena tidak ada hubungannya dengan pola adaptor yang ingin kita bicarakan). Tentu saja, itu akan menggunakan antarmuka yang berbeda dari konsol.
var ajaxlogger = {sendlog: function () {var data = this.urlencode (argumen); jQuery.ajax ({url: "http://example.com/log", data: data}); }, urlencode: function (arg) {... return encodedData; }, ...};Kami menggunakan permintaan AJAX JQuery, terutama untuk menghemat waktu dan mengabaikan hal -hal yang tidak ingin kami lakukan dengan mode adaptor. Yang harus kita lakukan sekarang adalah membuat adaptor dan mengubah loggerFactory sebelumnya untuk mengembalikan adaptor ini alih -alih objek konsol.
var ajaxloggerAdapter = {log: function (arg) {ajaxlogger.sendlog (arg); }};/ * Sesuaikan LoggerFactory */var LoggerFactory = {getLogger: function () {// Ubah nilai pengembalian kembali AjaxloggerAdapter; }, ...};Kami hanya membuat satu baris perubahan pada kode yang ada, dan seluruh program dapat menggunakan antarmuka log baru ini.
Adaptor kompleks
Antarmuka log adalah contoh yang sangat sederhana. Ini hanya memiliki satu metode, dan tidak sulit untuk memetakannya langsung ke metode lama. Ini tidak terjadi dalam banyak kasus. Anda dapat menghadapi masalah bahwa parameter fungsi yang dipetakan ini sama sekali berbeda, dan antarmuka lama mungkin tidak memiliki parameter ini sama sekali, dan Anda harus menghadapinya sendiri. Dalam beberapa kasus, Anda harus menghapus beberapa parameter karena antarmuka baru tidak menggunakannya sama sekali. Jika pemetaan antarmuka antara dua objek terlalu sulit, kita harus memikirkan cara lain, bagaimanapun, saya tidak ingin menemukan dan memodifikasi ribuan baris kode lama.