Apa mode dekorator?
Tambahkan beberapa tanggung jawab tambahan secara dinamis ke suatu objek. Dalam hal penambahan fungsi, mode dekorator lebih fleksibel daripada menghasilkan subclass.
1. Struktur
Komponen: Menentukan antarmuka objek yang secara dinamis dapat menambah tanggung jawab pada objek ini.
Komponen Antarmuka {Public Void Operation ();} Concretecomponent: Menerapkan antarmuka yang ditentukan oleh komponen. Class ConcreteComponent mengimplementasikan komponen {@Override public void operasi () {System.out.println ("Perilaku Awal"); }} Dekorator: Hiasi kelas abstrak, mewarisi komponen, memperluas fungsi kelas komponen dari kelas eksternal, tetapi untuk komponen, tidak perlu mengetahui keberadaan dekorator.
Dekorator kelas mengimplementasikan komponen {// tahan objek komponen dan membentuk hubungan agregasi dengan komponen komponen yang dilindungi komponen; // Lewati objek untuk menjadi dekorator publik yang dimodifikasi lebih lanjut (komponen komponen) {this.component = komponen; } @Override // Panggil metode asli yang akan dimodifikasi public void Operation () {component.Operation (); }} CONCRREDECORATOR: Objek dekoratif spesifik memainkan fungsi menambahkan tanggung jawab ke komponen.
Class Concretedecoratora memperluas dekorator {private string ditambahkan = "properti baru 1"; concretedecoratora publik (komponen komponen) {super (komponen); } public void Operation () {super.operation (); System.out.println ("Tambahkan atribut:" + ditambahkan); }} class concretedecoratorB memperluas dekorator {public concretedecoratorB (komponen komponen) {super (komponen); } public void Operation () {super.operation (); DitambahkanBehavior (); } public void ditambahkanBehavior () {System.out.println ("Tambahkan perilaku"); }} Kode uji
public class decoratorPattern {public static void main (string [] args) {component component = new ConcreteComponent (); component.operation (); System.out.println ("================================================================================================================================================= ============================================================== ================================================================ ============================================================== ============================================================== ============================================================== ================================================================ System.out.println ("=========================================================================================================================== }} Hasil berjalan
Awal perilaku =========================================================== ==================================================================== ==================================================================== ====================================================================
2. Skenario aplikasi
1. Anda perlu menambahkan tanggung jawab pada satu objek secara dinamis dan transparan, yaitu, itu tidak mempengaruhi objek lain.
2. Anda perlu menambahkan fungsi secara dinamis ke suatu objek, dan fungsi -fungsi ini dapat diuraikan secara dinamis.
3. Penting untuk menambahkan sejumlah besar fungsi yang dihasilkan oleh pengaturan dan kombinasi beberapa fungsi dasar, sehingga hubungan warisan menjadi tidak realistis.
4. Ketika metode menghasilkan subclass tidak dapat digunakan untuk ekspansi. Salah satu skenario adalah bahwa mungkin ada sejumlah besar ekstensi independen, yang akan menghasilkan sejumlah besar subkelas untuk mendukung setiap kombinasi, menyebabkan jumlah subclass meledak. Kasus lain mungkin karena definisi kelas disembunyikan, atau definisi kelas tidak dapat digunakan untuk menghasilkan subkelas.
3. Poin -Poin Kunci
1. Objek dekoratif dan benda nyata memiliki antarmuka yang sama. Dengan cara ini objek klien dapat berinteraksi dengan objek dekoratif dengan cara yang sama seperti objek nyata.
2. Objek dekoratif berisi referensi ke objek nyata.
3. Objek dekoratif menerima semua permintaan dari klien. Ini meneruskan permintaan ini ke objek nyata.
4. Objek dekoratif dapat menambahkan beberapa fungsi tambahan sebelum atau setelah meneruskan permintaan ini. Ini memastikan bahwa saat runtime, fungsi tambahan dapat ditambahkan secara eksternal tanpa memodifikasi struktur objek yang diberikan. Dalam desain yang berorientasi objek, ekstensi fungsional ke kelas tertentu biasanya dicapai melalui warisan.
Di atas adalah pengantar konten yang relevan tentang mode dekorator Java, saya harap ini akan membantu untuk pembelajaran semua orang.