Deskripsi mode dekorator
Catatan: Gunakan satu kelas untuk memodifikasi objek fungsional kelas lain secara dinamis sebelum atau sesudah, dan tambahkan beberapa fungsi tambahan ke dalamnya; Ini adalah dekorasi fungsi objek kelas. Kelas dekoratif dan kelas yang dihiasi memerlukan metode antarmuka akses yang sama (fungsi). Dalam kelas yang berorientasi objek yang dinamis, implementasi umumnya dibatasi oleh implementasi antarmuka yang sama; Kelas dekoratif harus memiliki referensi ke kelas yang dihiasi, yang digunakan untuk memanggil metode kelas dekoratif yang sesuai di kelas dekoratif, dan kemudian memodifikasinya;
Contoh skenario:
1>. Misalnya, ketika kita mengenakan pakaian dalam hidup kita, kemeja, jaket jas, celana panjang, dasi, dan sepasang sepatu kulit yang indah; Setiap ekstra adalah dekorasi untuk bagian depan atau seluruh tubuh;
2>. Misalnya, kami memiliki metode fungsi di bawah kelas yang dapat digunakan untuk menulis log, yang dapat digunakan untuk pengguna untuk masuk dalam fungsi tersebut. Mungkin kita perlu mendapatkan informasi operator saat ini sebelum menulis log, atau menulis log setelah masuk dengan sukses; Operasi tambahan sebelum menulis log umumnya adalah tujuan menulis log; Menulis log setelah logging berhasil juga umumnya informasi operasi dari proses log;
Oleh karena itu, mode dekorator digunakan untuk menerapkan, dan keduanya beroperasi dengan cara yang sama; Ini adalah ekspansi dekorator dari objek fungsional dekorator, yang pada dasarnya adalah kisaran fungsional yang sama dari metode asli;
Kode Sumber Contoh
1. Kategori yang Dihiasi
Salinan kode adalah sebagai berikut:
function wear () {
}
Wear.prototype.shirt = function () {
// pakai kemeja
console.log ('pakai kemeja');
}
2. Dekorator
Salinan kode adalah sebagai berikut:
Function Decorator (Wear) {
this.wear = aus;
}
Decorator.prototype.shirt = function () {
this.wear.shirt ();
// Setelah mengenakan kemeja, saya memasang dasi lagi
}
3. Cara menggunakan
Salinan kode adalah sebagai berikut:
var wear = new wear ();
var dekorator = dekorator baru (aus);
Decorator.Rhirt ();
Ini memungkinkan dekorasi yang diperluas dinamis dari objek fungsi kemeja aus. Anda tidak perlu tahu bagaimana metode dekoratif asli dilakukan. Ketahuilah apa fungsinya, dan kemudian ketahui apa fungsi tambahan yang ingin kami tambahkan;
Instruksi lainnya
Pola dekorator benar-benar menarik metode berorientasi objek: prinsip membuka hingga ekstensi dan menutup ke modifikasi; Semua metode fungsional yang diinginkan dilakukan tanpa memodifikasi [pakaian kelas dekorasi] dan memperluas [dekorator kelas dekorator];
Fitur utama dari model dekorator adalah bahwa referensi dekorator ke dekorator untuk mencapai dekorasi dekorator yang tidak dimodifikasi;
Simulasi: Adegan mengenakan kemeja terlebih dahulu, lalu dasi, dan kemudian setelan: dekorator di atas tetap tidak berubah:
2. Dekorator:
Salinan kode adalah sebagai berikut:
Function Decorator (Wear) {
this.wear = aus;
}
Decorator.prototype.shirt = function () {
this.wear.shirt (); // Hanya memakai kemeja di sini;
}
3. Buat kelas-kelas yang mengenakan tie dan pakaian setelan yang mirip dengan mewarisi subkelas dekorator
Salinan kode adalah sebagai berikut:
fungsi dekorator_tie (dekorator) {
this.decorator = dekorator;
}
Decorator_tie.prototype.shirt = function () {
this.decorator.shirt (); // pakai kemeja
Console.log ('Ware A Tie Again');
}
function decorator_western (dekorator) {
this.decorator = dekorator;
}
Decorator_western.prototype.shirt = function () {
this.decorator.shirt ();
console.log ('Pakai setelan lagi');
}
Bagaimana menggunakan:
Salinan kode adalah sebagai berikut:
// Kenakan bajumu dulu
var wear = new wear ();
var dekorator = dekorator baru (aus);
//decorator.shirt ();
// Kenakan dasi lagi
var tie = decorator_tie baru (dekorator);
//tie.shirt ();
// memakai setelan jas lagi
var western = new Decorator_western (dasi);
Western.Rhirt ();
Ini adalah contoh tiruan dari berpakaian dan dekorasi;