memperkenalkan
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.
teks
Mari memberi contoh. Bebek (dermaga) memiliki perilaku terbang (terbang) dan dukun (dukun), sementara kalkun juga memiliki perilaku terbang (terbang), suaranya melahap. Jika Anda bersikeras menerapkan aksi dukun (dukun) Turki, maka kami dapat menggunakan kembali metode dukun bebek, tetapi panggilan spesifik harus berkedip. Pada saat ini, kita dapat membuat adaptor kalkun sehingga Turki juga mendukung metode dukun, dan lobble masih harus disebut secara internal.
Oke, kami mulai mengimplementasikannya langkah demi langkah. Pertama, kita harus mendefinisikan perilaku abstrak bebek dan kalkun, yaitu fungsi metode masing -masing:
Salinan kode adalah sebagai berikut:
//Bebek
var duck = function () {
};
Duck.prototype.fly = function () {
Lempar kesalahan baru ("Metode ini harus ditulis ulang!");
};
Duck.prototype.quack = function () {
Lempar kesalahan baru ("Metode ini harus ditulis ulang!");
}
//Turki
var kalkun = fungsi () {
};
Turki.prototype.fly = function () {
Lempar kesalahan baru ("Metode ini harus ditulis ulang!");
};
Turki.prototype.gobble = function () {
Lempar kesalahan baru ("Metode ini harus ditulis ulang!");
};
Kemudian tentukan konstruktor spesifik bebek dan kalkun, masing -masing:
Salinan kode adalah sebagai berikut:
//Bebek
var mallardduck = function () {
Duck.Apply (ini);
};
Mallardduck.prototype = new duck (); // prototipe adalah bebek
Mallardduck.prototype.fly = function () {
Console.log ("Bisa terbang untuk jarak jauh!");
};
Mallardduck.prototype.quack = function () {
Console.log ("Gaga! Gaga!");
};
//Turki
var wildturkey = function () {
Turki.Apply (ini);
};
Wildturkey.prototype = Turki baru (); // prototipe adalah kalkun
Wildturkey.prototype.fly = function () {
Console.log ("Jarak terbang tampaknya sedikit pendek!");
};
Wildturkey.prototype.gobble = function () {
Console.log ("Gee! Wah!");
};
Untuk membuat Turki mendukung metode dukun, kami membuat adaptor Turki baru, TurkiAdapter:
Salinan kode adalah sebagai berikut:
var TurkeyAdapter = function (oturkey) {
Duck.Apply (ini);
this.oturkey = Oturkey;
};
TurkiAdapter.prototype = new Duck ();
TurkeyAdapter.Prototype.Quack = function () {
this.oturkey.gobble ();
};
TurkiAdapter.prototype.fly = function () {
var nfly = 0;
var nlenfly = 5;
untuk (; nfly <nlenfly;) {
this.oturkey.fly ();
nfly = nfly + 1;
}
};
Konstruktor mengambil objek instance Turki, dan kemudian menerapkannya menggunakan Duck, yang prototipe adaptornya adalah bebek, dan kemudian ingin memodifikasi ulang metode prototipe prototipe sehingga metode oturkey.gobble () disebut secara internal. Metode lalat juga telah membuat beberapa perubahan, memungkinkan kalkun terbang 5 kali berturut -turut (panggilan internal juga disebut metode Oturkey.fly () sendiri).
Memanggil metode ini sangat jelas. Setelah pengujian, Anda akan tahu hasilnya:
Salinan kode adalah sebagai berikut:
var omallardduck = mallardduck baru ();
var owildturkey = New WildTurkey ();
var oturkeyAdapter = New TurkiAdapter (OwildTurkey);
// Perilaku Bebek Asli
omallardduck.fly ();
omallardduck.quack ();
// Perilaku Turki Asli
owildturkey.fly ();
owildturkey.gobble ();
// Adaptor Turki Perilaku (Turki memanggil nama metode bebek)
oturkeyAdapter.fly ();
oturkeyAdapter.quack ();
Meringkaskan
Jadi bagaimana jika Anda menggunakan mode adaptor? Disarankan untuk menggunakan jika:
1. Gunakan objek yang ada, tetapi antarmuka metode atau atributnya tidak memenuhi kebutuhan Anda;
2. Anda ingin membuat objek yang dapat digunakan kembali yang dapat bekerja dengan objek lain yang tidak terkait atau objek yang tidak terlihat (mis. Objek yang tidak kompatibel dengan metode atau atribut antarmuka);
3. Ingin menggunakan objek yang ada, tetapi Anda tidak dapat membuat prototipe masing -masing untuk mencocokkan antarmuka. Adaptor objek dapat beradaptasi dengan metode atau properti antarmuka objek induknya.
Selain itu, mode adaptor dan beberapa mode lain mungkin membingungkan. Inilah perbedaan umum:
1. Meskipun mode adaptor dan jembatan serupa, titik awal jembatan berbeda. Tujuan jembatan adalah untuk memisahkan bagian antarmuka dan bagian implementasi, sehingga mereka dapat diubah lebih mudah dan relatif mandiri. Adaptor berarti mengubah antarmuka dengan objek yang ada.
2. Mode dekorator meningkatkan fungsi objek lain tanpa mengubah antarmuka, sehingga program yang sesuai lebih transparan daripada adaptor. Hasilnya adalah bahwa dekorator mendukung kombinasi rekursif, dan tidak mungkin menggunakan adaptor murni.
3. Mode proxy mendefinisikan proxy untuk objek lain tanpa mengubah antarmuka.