Dekorator sering diterjemahkan sebagai "dekorasi". Kedua entitas ini diperlukan dalam mode dekorator.
Definisi dekorator: Secara dinamis menambahkan beberapa tanggung jawab tambahan pada suatu objek, seperti mengecat dinding. Menggunakan mode dekorator lebih fleksibel daripada menggunakan generasi subkelas untuk mencapai ekspansi fungsional.
Mengapa menggunakan dekorator
Kami biasanya dapat menggunakan warisan untuk mencapai ekspansi fungsi. Harus meramalkan fungsi ekspansi ini.
Alasan untuk menggunakan dekorator adalah bahwa fungsi -fungsi ini perlu diputuskan secara dinamis oleh pengguna untuk bergabung. Dekorator menyediakan metode "plug and play" untuk memutuskan kapan harus menambahkan fitur apa selama runtime.
Cara menggunakan mode dekoratif
Ambil contoh mengemudi dalam adaptor. Mengemudi tumpukan, seperti menggali.
Mari kita buat antarmuka terlebih dahulu:
Salinan kode adalah sebagai berikut:
pekerjaan antarmuka publik {
public void insert ();
}
Pekerjaan antarmuka memiliki implementasi khusus: Masukkan tumpukan persegi atau tumpukan melingkar. Mari kita ambil penyisipan tumpukan persegi sebagai contoh:
Salinan kode adalah sebagai berikut:
Kelas publik Squarepeg mengimplementasikan pekerjaan {
public void insert () {
System.out.println ("Square Pile Insertion");
}
}
Sekarang ada aplikasi: sebelum tumpukan digerakkan, menggali lubang, dan setelah tumpukan digerakkan, papan kayu dipaku di tumpukan mungkin diperlukan untuk memaku rak setelah tumpukan digerakkan (hanya metafora).
Lalu kami menggunakan mode dekorator, di mana squarepeg tiang pancang persegi adalah dekorat (dicat dengan cat), kita perlu melukis beberapa "cat" pada dekorat, dan cat ini adalah fungsi ekstra.
Salinan kode adalah sebagai berikut:
dekorator kelas publik mengimplementasikan pekerjaan {
pekerjaan pribadi;
// Fungsi tambahan dikemas dalam daftar ini
Private ArrayList Lainnya = ArrayList baru ();
// Gunakan metode baru gabungan dalam konstruktor untuk memperkenalkan objek kerja;
dekorator publik (pekerjaan kerja) {
this.work = bekerja;
orang lain.add ("gali lubang");
Other.add ("Papan Kuku");
}
public void insert () {
newMethod ();
}
// Dalam metode baru, kami menambahkan metode lain sebelum dimasukkan, pesanan di sini ditentukan oleh pengguna secara fleksibel
public void newMethod () {
OtherMethod ();
work.insert ();
}
public void OtherMethod () {
ListIterator ListIterator = Other.ListIterator ();
while (listIterator.hasnext ()) {
System.out.println (((String) (ListIterator.next ())) + "In Progress");
}
}
}
Dalam contoh di atas, kami memberi peringkat lubang penggalian dan papan paku di depan tumpukan insert.
Oke, mode dekorator keluar, mari kita lihat bagaimana menyebutnya:
Salinan kode adalah sebagai berikut:
Work squarepeg = new squarepeg ();
Dekorator kerja = dekorator baru (squarepeg);
dekorator.insert ();
Mode dekorator selesai di sini.
Jika Anda berhati -hati, Anda akan menemukan bahwa panggilan di atas mirip dengan panggilan yang kami baca ketika kami membaca file:
Salinan kode adalah sebagai berikut:
Filereader fr = filereader baru (nama file);
BufferedReader BR = BufferedReader baru (FR);
Faktanya, API I/O Java diimplementasikan menggunakan dekorator.
Implementasi dekorator di Jive
Dalam sistem forum, beberapa karakter khusus tidak dapat muncul di forum, seperti "Down with xxx", kita perlu memfilter font "reaksioner" ini. Jangan biarkan mereka muncul atau menampilkannya dalam kecerahan tinggi.
Dalam sebuah artikel yang secara khusus berbicara tentang Jive di kolom IBM Java, disebutkan bahwa forumsageFilter.java di Jive menggunakan mode dekorator. , maka Anda dapat mengatur ulang forumessageFilter sebagai mode dekorator.
Oleh karena itu, ketika kita memutuskan apakah itu benar -benar mode dekorator dan akan benar -benar menggunakan mode dekorator, kita harus memahami definisi mode dekorator dan peran yang terlibat (dekorat dan dekorator).