Artikel ini menjelaskan kasus roti kukus yang dicelup yang diimplementasikan oleh Java berdasarkan pola dekorator. Bagikan untuk referensi Anda, sebagai berikut:
1. Definisi Pola
Pola dekorator secara dinamis memperluas fungsi objek tanpa mengubah file asli dan menggunakan warisan. Itu membungkus objek nyata dengan membuat objek pembungkus, yaitu dekorasi.
Objek dekoratif dan objek nyata memiliki antarmuka yang sama, sehingga objek klien dapat berinteraksi dengan objek dekoratif dengan cara yang sama seperti objek nyata.
Objek dekoratif berisi referensi ke objek nyata.
2. Contoh model
1. Analisis Pola
Kami menggunakan kasus vendor berhati hitam untuk membuat roti yang diwarnai untuk menggambarkan model ini.
2. Dekorator Mode Diagram Kelas Statis
3. Contoh Kode
3.1 Buat antarmuka roti kukus - Ibread
Paket com.demo.abs;/** * Antarmuka pemrosesan BUN yang dikukus * * @author * */antarmuka publik Ibread {// Siapkan bahan public void prepair (); // Harmony public void lutheflour (); // roti kukus public void steamed (); / *** memproses roti kukus*/ proses public void ();}3.2 Implementasi Bun Normal - Normalbread
Paket com.demo.abs;/** * Implementasi roti kukus normal * * @author * */kelas publik NormBread mengimplementasikan Ibread {// Siapkan bahan -bahan public void prepair () {System.out.println ("Siapkan tepung, air, dan bubuk bubuk ..."); } // hemian public void kneeFlour () {System.out.println ("Hmian ..."); } // roti kukus public void steamed () {System.out.println ("Roti kukus ... roti kukus harum keluar dari oven!"); } / *** Memproses roti kukus* / proses public void () {// Siapkan bahan persiapan (); // kneadflour (); // kukus kukus (); }}3.3 Buat dekorator abstrak - Abstractbread
Paket com.demo.decorator; import com.demo.abs.ibread;/** * dekorator abstrak * * @author * */kelas abstrak publik abstrakbread mengimplementasikan {// menyimpan objek ipread objek yang masuk private final iBread bread; Public AbstractBread (IBread Bread) {this.bread = roti; } // Siapkan materi public void persiapan () {this.bread.prepair (); } // dengan lembut void kneeFlour () {this.bread.cheadflour (); } // roti public void steamed () {this.bread.steamed (); } // Memproses roti public void yang dikukus () {prepair (); lutut (); dikukus (); }}3.4 Buat dekorator pewarna - CornDecorator
Paket com.demo.decorator; import com.demo.abs.ibread;/** * Roti jagung ramping * * @author * */kelas publik Corndecorator memperluas Abstractbread {// Metode Konstruksi Public Corndecorator (IBread Bread) {Super Bread); } // vendor hati hitam telah mulai mewarnai public void paint () {System.out.println ("Tambahkan pewarna kuning lemon ..."); } // kelebihan beban metode adonan kelas induk @Override public void lutheflour () {// this.paint () dimulai setelah menambahkan pewarna ke tepung; // Tempel super.cheadflour (); }}3.5 Buat Dekorator Scalypse - SweetDecorator
Paket com.demo.decorator; import com.demo.abs.ibread;/** * Cyperus Bun yang dikukus * * @author * */kelas publik SweetDecorator memperluas Abstractbread {// Metode Konstruksi Publik SweetDecorator (IBread Bread) {Super Bread); } // vendor berhati hitam mulai menambahkan cyperus public void cat () {System.out.println ("Tambahkan Cyperus ..."); } // kelebihan beban metode adonan kelas induk @Override public void lutheflour () {// Mulai adonan this.paint () Setelah menambahkan cyperus ke tepung; // hemma super.cheadflour (); }}3.6 Memproduksi roti kukus jagung manis - klien
Paket com.demo; import com.demo.abs.ibread; import com.demo.abs.normalbread; import com.demo.decorator.corndecorator; import com.demo.decorator.sweetDecorator;/** * Aplikasi klien * * @author * */klien kelas publik {/** @Author @par/** * {// Produksi System Buns Dekoratif System.out.println ("/n ====== Mulai roti kukus dekoratif !!!"); // Buat instance Bun Normal Normal // Ini adalah instance objek yang perlu kita bungkus (dekorasi) Ibread NormBread = new NormBread (); // mari kita mulai mendekorasi roti kukus normal! Lai Lai // Gunakan sakarin untuk menghiasi roti kukus normalbread = sweetDecorator baru (NormBread); // Gunakan pewarna lemon kuning untuk menghiasi roti kukus normalbread = CornDecorator baru (NormBread); // produksi informasi roti kukus normalbread.process (); System.out.println ("====== Hiasi Ujung Roti yang dikukus !!!"); }}4. Hasil Operasi
==== Mulai mendekorasi roti kukus! Lai Lai
Siapkan tepung, air, dan baking powder ...
Tambahkan pewarna lemon kuning ...
Tambahkan sianin ...
Gemuk...
Roti kukus ... roti kukus harum keluar dari oven!
==== Sanggul kukus dekoratif berakhir! Lai Lai
3. Prinsip -prinsip desain model ini
1 Bagian Perubahan Tertutup
2 Prinsip "Buka dan Tutup"
3 pemrograman berorientasi abstrak
4. Lebih suka kombinasi daripada warisan
4. Gunakan kesempatan
1. Ketika kita perlu menambahkan fitur atau tanggung jawab baru ke objek yang ada secara dinamis, kita dapat mempertimbangkan untuk menggunakan pola dekorator.
2. Ketika tanggung jawab suatu objek sering berubah atau tanggung jawab perlu meningkat secara dinamis, hindari menambahkan ekspansi subkelas yang diwariskan untuk beradaptasi dengan perubahan tersebut, karena metode ini akan menyebabkan subkelas berkembang terlalu cepat dan sulit dikendalikan. Saat ini, mode dekorator dapat digunakan.
5. Dekorator Mode Diagram Kelas Statis
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.