Apakah Pola Penghias ada di kelas Java IO?

14

Untuk tugas, saya harus mencari tahu dari pola desain Geng Empat mana kelas java.io.Readerdan subclassnya java.io.PushbackReader, java.io.BufferedReaderdan java.io.FilterReaderdibangun bersama.

Menurut posting ini , pola desain akan menjadi Pola Penghias. Ini hanya masuk akal bagi saya jika PushbackReader, BufferedReaderdan FilterReaderdapat didekorasi untuk digunakan secara bersamaan, menciptakan secara efektif a BufferedPushbackFilterReader. Apakah itu idenya?

Komunitas
sumber
Lihatlah konstruktor dari kelas-kelas itu. Apakah mereka memungkinkan Anda untuk menumpuk, misalnya Buffered sifat di atas Filtersifat?
Kilian Foth
@Kilian Foth: Sepertinya begitu.

Jawaban:

10

Ya, Anda memang bisa mendekorasi mereka seperti itu. Perhatikan saja yang berikut ini

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

Itu akan menghiasi pembaca asli

  • pertama kali disangga
  • dan kemudian aktifkan fungsi pushback / unread (masih hasilnya buffered ..)

FilterReaderdan Readerkelas dasar dalam hierarki ...


sumber
Dan BufferedReader, FilterReaderdan PushbackReaderapakah dekorator Reader, kan?
1
Ya itu benar.
duffymo
1
Ya - BufferedReader membuat pembaca yang mendasari buffered, PushbackReader memungkinkan Anda untuk 'membaca' data dari pembaca dll ...
11

The pola dekorator berlaku di sini karena BufferedReadermembungkus sebuah Reader- itu masihReader (memiliki semua metode Reader), tetapi memiliki lebih "lonceng dan peluit" (lebih metode).

Berikut adalah contoh yang menunjukkan bagaimana satu kelas "menghiasi" fungsi yang dibungkusnya, dan Anda dapat mengikatnya untuk tetap menghias:

        new BufferedReader(new FileReader(new File("some.file")));
Orang Bohemian
sumber