Pola dekorator dapat secara dinamis menambahkan beberapa tanggung jawab tambahan pada suatu objek. Dalam hal penambahan fungsi, mode dekorator lebih fleksibel daripada menghasilkan subclass.
Lingkungan yang berlaku untuk mode ini adalah:
(1) Tambahkan tanggung jawab ke satu objek dengan cara yang dinamis dan transparan tanpa mempengaruhi objek lain.
(2) Tangani tanggung jawab yang dapat dicabut.
(3) 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.
Langkah -langkah utama untuk mengimplementasikan mode ini:
(1) komponen (kelas dasar dari objek yang dihiasi): mendefinisikan antarmuka objek, yang secara dinamis dapat menambah tanggung jawab pada objek ini;
(2) komponen concreteC (objek dekoratif spesifik): mendefinisikan objek tertentu, dan dekorator dapat menambah tanggung jawab tambahan;
(3) dekorator (kelas abstrak dekorator): mempertahankan referensi ke instance komponen dan mendefinisikan antarmuka yang konsisten dengan komponen ( yaitu, untuk mewarisi atau mengimplementasikan kelas dasar dari objek yang dihiasi );
(4) Concretedecorator: objek dekoratif tertentu, menambahkan tanggung jawab khusus pada objek dekoratif spesifik yang diadakan secara internal;
Ini mungkin agak sulit untuk dipahami semua orang, jadi kami masih diam:
Setelah musim dingin, cuaca menjadi lebih dingin dan lebih dingin. Setelah pulang kerja, sebagai pecinta kuliner veteran, akan sangat bagus untuk membuat janji dengan dua atau tiga teman untuk mengadakan pesta panas. Berbicara tentang hot pot, saya harus menyebutkan pot panas Dalong yang saya makan di Chengdu, dengan semua jenis pot dasar pot dan lauk, tetapi favorit saya adalah bagian bawah pot asli Dalong Hot Pot, daging sapi pedas, babi Dadao, Tianwei Sausage, Tuotuo Beef, Ribs Babi Pedas, dll. Saya bahkan bisa merayap.
Ketika sampai pada ini, Anda harus merasa sedikit tentang hal itu. Bagian bawah pot yang disebutkan di atas sebenarnya adalah dasar dari objek dekoratif . Bahan -bahannya sebenarnya adalah objek abstrak dekoratif . Bagian bawah pot spesifik dari dalong hot pot asli pot dasar pot adalah benda dekoratif spesifik. Berbagai lauk yang digunakan untuk menghiasi bagian bawah pot adalah benda dekoratif spesifik . Berbicara tentang hal ini, semua orang tiba -tiba menyadarinya. Mari kita mulai implementasi kode tertentu:
Langkah 1: Tentukan kelas dasar dari objek yang dihiasi (dapat berupa kelas atau antarmuka abstrak)
Antarmuka Publik Guodi {public float cost (); // Tentu saja bagian bawah pot harus diberi harga public string name (); // nama juga harus tersedia} Langkah 2: Tentukan objek dekoratif spesifik (yaitu, berbagai bagian bawah pot, dua didefinisikan di sini)
kelas publik Yuanyang mengimplementasikan guodi {@override public float cost () {return 48.0f; } @Override public string name () {return "double pot base"; }} kelas publik Dalongyan mengimplementasikan guodi {@override public float cost () {return 59.0f; } @Override name public string () {return "Dalong Hot Pot Original Pot Base"; }}Langkah 3: Tentukan kelas abstrak dekorator
kelas abstrak publik Peicai mengimplementasikan guodi {private guodi guodi; Public FoodDecorator (Guodi Guodi) {super (); this.guodi = guodi; } @Override public float cost () {return guodi.cost (); } @Override name string publik () {return guodi.name (); }}Langkah 4: Tentukan objek dekorator spesifik
kelas publik Malaniurou memperluas Peicai {Public Malaniurou (Guodi Guodi) {super (guodi); } @Override public float cost () {return super.cost ()+46f; } @Override name string public () {return super.name ()+"+daging sapi pedas"; }} kelas publik maodu memperluas peicai {public maodu (guodi guodi) {super (guodi); } @Override public float cost () {return super.cost ()+30f; } @Override name public string () {return super.name ()+"+Big Knife Tripe"; }}Kelas Tes:
tes kelas publik {public static void main (string [] args) {guodi guodi = new dalongyan (); // memesan dalong pot hot pot asli Malaniurou y = new Malaniurou (guodi); // dapatkan daging sapi muda maodu x = maodu baru (y); // keranjang. Knone Big. pesanan "+x.name ()+", konsumsi "+s.cost ()); }}Hasil output:
1. Sebanyak hotpot dalong pot dasar pot + daging sapi pedas + babat dadao dipesan, dan total 135 dikonsumsi
Di atas adalah model dekorator Java yang diperkenalkan kepada Anda oleh editor (memahami prinsip kode dari perspektif kehidupan nyata). Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!