Pola dekorator secara dinamis dapat menambah kemampuan pada objek yang ada. Di bawah ini, saya akan menggunakan contoh sederhana untuk mendemonstrasikan cara menggunakan pola dekorator dalam sebuah program.
1. Pola dekorator
Anggap saja Anda sedang mencari pacar. Ada banyak gadis dari berbagai negara, seperti Amerika Serikat, Tiongkok, Jepang, Prancis, dll. Masing-masing dari mereka memiliki kepribadian dan minat yang berbeda. Jika Anda perlu mensimulasikan situasi seperti itu dalam program, asumsikan bahwa setiap gadis adalah Untuk a Kelas Java, akan ada ribuan kelas, yang akan menyebabkan perluasan kelas, dan skalabilitas desain seperti itu akan relatif buruk. Karena jika kita membutuhkan gadis baru, kita perlu membuat kelas Java baru, yang sebenarnya melanggar prinsip OCP (terbuka untuk ekstensi, tertutup untuk modifikasi) yang harus diikuti dalam pengembangan program.
Mari kita buat desain lain di mana setiap kepribadian atau hobi menjadi hiasan yang dapat ditambahkan secara dinamis ke tubuh setiap gadis.
2. Struktur diagram kelas
3. Kode contoh pola dekorator
Gadis.java
Copy kode kodenya sebagai berikut:
kelas abstrak publik Gadis {
String deskripsi = "tidak ada yang khusus";
String publik getDeskripsi(){
deskripsi pengembalian;
}
}
AmericanGirl.java
Copy kode kodenya sebagai berikut:
kelas publik AmericanGirl memperluas Gadis {
publikAmericanGirl() {
deskripsi = "+Amerika";
}
}
EuropeanGirl.java
Copy kode kodenya sebagai berikut:
kelas publik EuropeanGirl memperluas Gadis {
publik EropaGadis(){
deskripsi = "+Eropa";
}
}
GirlDecorator.java
Copy kode kodenya sebagai berikut:
kelas abstrak publik GirlDecorator memperluas Girl {
String abstrak publik getDescription();
}
Sains.java
Copy kode kodenya sebagai berikut:
Sains kelas publik memperluas GirlDecorator {
gadis gadis pribadi;
Sains publik(Gadis perempuan){
this.girl = gadis;
}
@Mengesampingkan
String publik getDeskripsi() {
kembalikan this.girl.getDescription() + "+Like Science";
}
public void caltulateStuff() {
System.out.println("perhitungan ilmiah!");
}
}
Seni.java
Copy kode kodenya sebagai berikut:
Seni kelas publik memperluas GirlDecorator {
gadis gadis pribadi;
Seni publik(Gadis perempuan){
this.girl = gadis;
}
@Mengesampingkan
String publik getDeskripsi() {
kembalikan this.girl.getDescription() + "+Like Art";
}
penarikan kekosongan publik() {
System.out.println("menggambar!");
}
}
Main.java
Copy kode kodenya sebagai berikut:
kelas publik Utama {
public static void main(String[] args) {
//Gadis Amerika biasa
Gadis g1 = Gadis Amerika baru();
Sistem.keluar.println(g1.getDescription());
//Mereka yang menyukai sains
Sains g2 = Sains baru(g1);
Sistem.keluar.println(g2.getDescription());
//Mereka yang menyukai seni
Seni g3 = Seni baru (g2);
Sistem.keluar.println(g3.getDescription());
}
}
4. Penerapan pola dekorator di JDK
IO di Java adalah contoh paling umum penggunaan pola dekorator.
Berikut ini adalah contoh sederhana mendekorasi objek InputStreamReader melalui objek BufferedReader:
Copy kode kodenya sebagai berikut:
Input BufferedReader = BufferedReader baru (InputStreamReader baru (System.in));
//System.in adalah objek InputStream
(Teks lengkap berakhir)