Artikel ini menjelaskan prinsip -prinsip dan penggunaan mode dekoratif pola desain java. Bagikan untuk referensi Anda, sebagai berikut:
Mode dekoratif dapat secara dinamis memperluas fungsionalitas suatu objek tanpa mengubah file asli dan menggunakan warisan. Itu membungkus objek nyata dengan membuat objek pembungkus, yaitu dekorasi. Desain IO di JDK menggunakan mode dekoratif, yang dapat memperluas fungsi dengan membungkus aliran simpul melalui aliran penyaringan.
Komposisi karakter dalam mode dekoratif:
① Peran komponen abstrak: Berikan antarmuka abstrak untuk membakukan objek yang disiapkan untuk menerima fungsi pemrosesan. (InputStream, OutputStream)
② Peran Komponen Beton: Menentukan kelas yang akan menerima fungsi tambahan. (Aliran simpul)
③ Peran dekorator: Memegang sebuah instance dari objek komponen dan mengimplementasikan antarmuka yang konsisten dengan antarmuka komponen abstrak. (FilterInputStream, FilterOutputStream)
④ Peran dekorator beton: Bertanggung jawab untuk menambahkan fungsi tambahan ke objek komponen. (Aliran filter dengan fungsi tambahan tertentu, bufferedInputStream, DatainputStream, dll.)
Berikut adalah contoh sederhana dari pola dekoratif:
1. Peran komponen abstrak : Tentukan komponen antarmuka
Paket com.tydic.decorator; // Abstrak Komponen Peran Komponen Antarmuka Publik {public void dosomething ();}2. Peran Konstruksi Khusus : Anda perlu menerapkan peran komponen abstrak, dan Anda dapat menambahkan beberapa tanggung jawab pada objek ini.
Paket com.tydic.decorator;/** * Konstruksi peran konkret, mengimplementasikan konstruksi peran abstrak * @Author Administrator * */kelas publik Concretecomponent mengimplementasikan komponen {@Override public void dosomething () {System.out.println ("function a"); }} 3. Hiasi Peran : Pegang objek untuk membangun referensi ke peran dan mengimplementasikan peran komponen abstrak. Peran komponen abstrak diimplementasikan karena jenisnya tidak dapat diubah setelah menambahkan fungsi, seperti halnya FilterInputStream masih merupakan aliran input, yang masih memiliki karakteristik aliran input. Referensi ke peran pembangunan objek adalah karena untuk menambah fungsi, Anda harus memegang referensi ke peran komponen yang akan dilampirkan oleh fungsi tersebut.
Paket com.tydic.decorator;/*** Hiasi peran, pegang referensi ke peran komponen, dan terapkan peran komponen* Jika Anda ingin menambahkan fungsi, Anda harus mengimplementasikan peran komponen. Untuk menambahkan fungsi, Anda harus memegang referensi ke peran komponen untuk dilampirkan. Inilah sebabnya mengapa Anda harus memegang referensi ke peran komponen * @Author Administrator * */Dekorator kelas publik mengimplementasikan komponen {komponen komponen privat; // Ini adalah peran komponen yang harus dilampirkan, yang dapat diunggah dalam saat dekorator publik yang instanasi (komponen komponen) {this.component = komponen; } @Override public void dosomething () {component.dosomething (); }}4. Peran dekoratif spesifik : Peran dekoratif perlu diwariskan dan fungsi yang akan dilampirkan diberikan
Paket com.tydic.decorator;/** * Untuk peran dekoratif spesifik 1, peran dekoratif perlu diwariskan dan fungsi yang akan dilampirkan diberikan * @Author Administrator * */Kelas Publik Concretedecorator1 memperluas dekorator {public concretedecorator1 (komponen komponen) {super); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // Tambahkan fungsi berdasarkan fungsi asli dari peran komponen spesifik yang dilewati} // fungsi tambahan public void doanothing () {System.out.println ("Function B"); }} Paket com.tydic.decorator;/** * Untuk peran dekoratif spesifik 2, peran dekoratif perlu diwariskan dan fungsi yang akan dilampirkan diberikan * @Author Administrator * */Kelas Publik Concretedecorator2 memperluas dekorator {public concretedecorator2 (komponen komponen) {super); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // fungsi tambahan public void doanothing () {System.out.println ("function c"); }}5. Tulis kode klien
Paket com.tydic.decorator; klien kelas publik {public static void main (string [] args) {component component = new ConcreteComponent (); // buat komponen peran komponen2 = component component baru (component) (component//component component component (component component new component (componedCoror1 (component) (component//component component component component3 = new concretedecoror ( komponen3.dosomething (); }}Meringkaskan:
Mode dekoratif dapat menggunakan metode kombinasi dan secara dinamis memperluas objek saat runtime tanpa warisan. Ini adalah sesuatu yang tidak bisa dilakukan warisan. Warisan adalah statis, perpanjangan ke kelas.
Keuntungan dan Kekurangan Mode Dekoratif:
Keuntungan: 1. Perpanjang fungsi objek, yang lebih fleksibel daripada warisan. 2. Dengan menggunakan kategori dekoratif spesifik yang berbeda dan pengaturan serta kombinasi kategori dekoratif ini, desainer dapat membuat banyak kombinasi perilaku yang berbeda.
Kerugian: Ini akan membuat program lebih rumit.
Untuk lebih banyak konten terkait Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Pendahuluan dan Tutorial Lanjutan tentang Pemrograman Berorientasi Objek Java", "Tutorial tentang Struktur Data Java dan Algorithma", "Ringkasan Keterampilan Operasi Java Java", "Ringkasan Operasi Java File dan Keterampilan Operasi Direktori" dan Ringkasan Java Operasi Java "," Ringkasan Operasi Java Keterampilan Operasi Direktori "dan" Ringkasan Java Ringkasan JAVA "
Saya harap artikel ini akan membantu pemrograman Java semua orang.