Rumah hujung hadapan web tutorial js Pemahaman mendalam tentang siri JavaScript (29): Penjelasan terperinci tentang corak penghias corak reka bentuk_kemahiran javascript

Pemahaman mendalam tentang siri JavaScript (29): Penjelasan terperinci tentang corak penghias corak reka bentuk_kemahiran javascript

May 16, 2016 pm 04:11 PM
javascript corak penghias corak reka bentuk

Pengenalan

Penghias menyediakan alternatif yang lebih fleksibel kepada warisan. Penghias digunakan untuk membungkus objek dengan antara muka yang sama Mereka bukan sahaja membenarkan anda menambah tingkah laku pada kaedah, tetapi juga menetapkan kaedah untuk dipanggil oleh objek asal (seperti pembina penghias).

Penghias digunakan untuk menambah fungsi baharu dalam bentuk kaedah terlebih beban Mod ini boleh menambah tingkah laku anda sendiri sebelum atau selepas penghias untuk mencapai tujuan tertentu.

Teks

Jadi apakah faedah corak penghias? Seperti yang dinyatakan sebelum ini, penghias adalah alternatif kepada warisan. Apabila skrip dijalankan, menambah tingkah laku pada subkelas akan menjejaskan semua kejadian kelas asal, tetapi penghias tidak akan. Sebaliknya, ia boleh menambah gelagat baharu pada objek berbeza secara individu. Seperti yang ditunjukkan dalam kod berikut:

Salin kod Kod adalah seperti berikut:

//Kelas (fungsi) yang perlu dihias
fungsi Macbook() {
This.cost = function () {
Pulangan 1000;
};
}

fungsi Memori(macbook) {
This.cost = function () {
         pulangkan macbook.cost() 75;
};
}

fungsi BlurayDrive(macbook) {
This.cost = function () {
         pulangkan macbook.cost() 300;
};
}


fungsi Insurans(macbook) {
This.cost = function () {
         pulangkan macbook.cost() 250;
};
}


// Penggunaan
var myMacbook = Insurans baharu(BlurayDrive baharu(Memori baharu(Macbook baharu())));
console.log(myMacbook.cost());

Berikut ialah contoh lain Apabila kita memanggil performTask pada objek penghias, ia bukan sahaja mempunyai beberapa gelagat penghias, tetapi juga memanggil fungsi performTask bagi objek asas.

Salin kod Kod adalah seperti berikut:

fungsi ConcreteClass() {
This.performTask = fungsi () {
This.preTask();
console.log('melakukan sesuatu');
This.postTask();
};
}

fungsi AbstractDecorator(berhias) {
This.performTask = fungsi () {
          decorated.performTask();
};
}

fungsi ConcreteDecoratorClass(berhias) {
This.base = AbstractDecorator;
This.base(dihiasi);

dihiasi.preTask = fungsi () {
console.log('pra-panggilan..');
};

dihiasi.postTask = fungsi () {
console.log('pasca-panggilan..');
};

}

var concrete = new ConcreteClass();
var decorator1 = ConcreteDecoratorClass(konkrit);
var decorator2 = ConcreteDecoratorClass baharu(decorator1);
decorator2.performTask();

Satu lagi contoh menyeluruh:

Salin kod Kod adalah seperti berikut:

var tree = {};
tree.decorate = function () {
console.log('Stellen Sie sicher, dass der Baum nicht fällt');
};

tree.getDecorator = Funktion (Deko) {
Tree[deco].prototype = this;
Neuen Baum zurückgeben[deco];
};

tree.RedBalls = function () {
This.decorate = function () {
This.RedBalls.prototype.decorate(); // Schritt 7: Führen Sie zuerst die Dekorationsmethode des Prototyps aus (das ist Angel)
console.log('Zieh ein paar rote Bälle an'); // Schritt 8 Dann Ausgabe rot
// Verwenden Sie diese 2 Schritte als Dekorationsmethode für RedBalls
}
};

tree.BlueBalls = function () {
This.decorate = function () {
This.BlueBalls.prototype.decorate(); // Schritt 1: Führen Sie zuerst die Dekorationsmethode des Prototyps aus, also tree.decorate()
console.log('Blaue Kugeln hinzufügen'); // Schritt 2 Dann blau ausgeben
// Verwenden Sie diese 2 Schritte als Dekorationsmethode für BlueBalls
}
};

tree.Angel = function () {
This.decorate = function () {
This.Angel.prototype.decorate(); // Schritt 4: Führen Sie zuerst die Dekorationsmethode des Prototyps aus (das ist BlueBalls)
console.log('An angel on the top'); // Schritt 5 Dann Engel ausgeben
// Verwenden Sie diese 2 Schritte als Angels Dekorationsmethode
}
};

tree = tree.getDecorator('BlueBalls'); // Schritt 3: Zuweisen des BlueBalls-Objekts zum Baum. Zu diesem Zeitpunkt ist getDecorator im übergeordneten Prototyp noch verfügbar
tree = tree.getDecorator('Angel'); // Schritt 6: Weisen Sie das Angel-Objekt dem Baum zu. Zu diesem Zeitpunkt ist getDecorator im übergeordneten Prototyp noch verfügbar
tree = tree.getDecorator('RedBalls'); // Schritt 9: Weisen Sie das RedBalls-Objekt dem Baum zu

tree.decorate(); // Schritt 10: Führen Sie die Dekorationsmethode des RedBalls-Objekts aus

Zusammenfassung

Das Dekoratormuster ist eine Möglichkeit, jede zu dekorierende Funktion dynamisch in eine separate Funktion einzufügen und diese Funktion dann zu verwenden, um das vorhandene zu dekorierende Funktionsobjekt zu umschließen Zur Ausführung kann der aufrufende Code selektiv und nacheinander Dekorationsfunktionen verwenden, um Objekte nach Bedarf zu umhüllen. Der Vorteil besteht darin, dass die Kernaufgaben der Klasse (Funktion) und der Dekorationsfunktion getrennt sind.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara corak reka bentuk dan corak seni bina dalam rangka kerja Java Perbezaan antara corak reka bentuk dan corak seni bina dalam rangka kerja Java Jun 02, 2024 pm 12:59 PM

Perbezaan antara corak reka bentuk dan corak seni bina dalam rangka kerja Java

Penggunaan indah corak penyesuai dalam corak reka bentuk Java Penggunaan indah corak penyesuai dalam corak reka bentuk Java May 09, 2024 pm 12:54 PM

Penggunaan indah corak penyesuai dalam corak reka bentuk Java

Analisis Corak Penghias dalam Corak Reka Bentuk Java Analisis Corak Penghias dalam Corak Reka Bentuk Java May 09, 2024 pm 03:12 PM

Analisis Corak Penghias dalam Corak Reka Bentuk Java

Analisis kes praktikal corak reka bentuk PHP Analisis kes praktikal corak reka bentuk PHP May 08, 2024 am 08:09 AM

Analisis kes praktikal corak reka bentuk PHP

Apakah kelebihan dan kekurangan menggunakan corak reka bentuk dalam rangka kerja java? Apakah kelebihan dan kekurangan menggunakan corak reka bentuk dalam rangka kerja java? Jun 01, 2024 pm 02:13 PM

Apakah kelebihan dan kekurangan menggunakan corak reka bentuk dalam rangka kerja java?

Bagaimana corak reka bentuk menangani cabaran penyelenggaraan kod Bagaimana corak reka bentuk menangani cabaran penyelenggaraan kod May 09, 2024 pm 12:45 PM

Bagaimana corak reka bentuk menangani cabaran penyelenggaraan kod

Aplikasi corak reka bentuk dalam rangka kerja Guice Aplikasi corak reka bentuk dalam rangka kerja Guice Jun 02, 2024 pm 10:49 PM

Aplikasi corak reka bentuk dalam rangka kerja Guice

Corak Reka Bentuk PHP: Pembangunan Dipacu Ujian dalam Amalan Corak Reka Bentuk PHP: Pembangunan Dipacu Ujian dalam Amalan Jun 03, 2024 pm 02:14 PM

Corak Reka Bentuk PHP: Pembangunan Dipacu Ujian dalam Amalan

See all articles