Dekoratör Kalıbı Java IO sınıflarında var mı?


14

Bir görev için, ben Gang of Four tasarım modelinin sınıfları olduğunu öğrenmek zorundayız java.io.Readerve alt sınıfları java.io.PushbackReader, java.io.BufferedReaderve java.io.FilterReaderile inşa edildi.

Bu yazıya göre , tasarım deseni Dekoratör Deseni olacaktır. Bu yalnızca bana mantıklı PushbackReader, BufferedReaderve FilterReaderetkili bir şekilde oluşturarak, aynı anda kullanılmak üzere dekore edilebilir BufferedPushbackFilterReader. Fikir bu mu?


Bu sınıfların yapıcılarına bakın. İstiflemenize izin veriyorlar mı, örneğin Buffered doğanın tepesindeki Filterdoğa?
Kilian Foth

@Kilian Foth: Öyle görünüyor.

Yanıtlar:


10

Evet, onları gerçekten böyle dekore edebilirsiniz. Sadece aşağıdakileri göz önünde bulundurun

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

Bu, orijinal bir okuyucuyu

  • önce arabelleğe alın
  • ve ardından geri itme / okunmamış işlevi etkinleştirin (yine de sonuç arabelleğe alınır.)

FilterReaderve Readerhiyerarşideki temel sınıflar ...


Ve BufferedReader, FilterReaderve PushbackReaderdekoratörler vardır Readersağ?

1
Evet doğru.
duffymo

1
Evet - BufferedReader temel okuyucuyu arabelleğe alır, PushbackReader okuyucudan vb. Verileri 'okunmamış' hale

11

Dekoratör deseni burada da geçerlidir, çünkü BufferedReadersargıları Reader- bu hala bir Reader(o tüm yöntemleri vardır Reader), ama daha "çan ve ıslık" (daha yöntemleri) vardır.

Aşağıda, bir sınıfın sardığı sınıfın işlevselliğini nasıl "süslediğini" gösteren bir örnek verilmiştir ve bunları süslemeye devam etmek için zincirleyebilirsiniz:

        new BufferedReader(new FileReader(new File("some.file")));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.