Decorator Pattern มีอยู่ในคลาส Java IO หรือไม่


14

สำหรับการกำหนดผมต้องไปหาที่ของแก๊งสี่รูปแบบการออกแบบการเรียนjava.io.Readerและ subclasses ของมันjava.io.PushbackReader, java.io.BufferedReaderและjava.io.FilterReaderถูกสร้างขึ้นด้วย

ตามโพสต์นี้รูปแบบการออกแบบจะเป็นรูปแบบมัณฑนากร นี้จะทำให้รู้สึกถึงฉันถ้าPushbackReader, BufferedReaderและFilterReaderสามารถที่จะตกแต่งที่จะใช้ในเวลาเดียวกัน, BufferedPushbackFilterReaderการสร้างได้อย่างมีประสิทธิภาพ นั่นเป็นแนวคิดหรือไม่?


ดูคอนสตรัคเตอร์ของคลาสเหล่านั้น พวกมันอนุญาตให้คุณเรียงซ้อนเช่นBuffered ธรรมชาติเหนือFilterธรรมชาติหรือไม่?
Kilian Foth

@Kilian Foth: ดูเหมือนว่า

คำตอบ:


10

ใช่คุณสามารถตกแต่งได้อย่างนั้น เพียงแค่พิจารณาดังต่อไปนี้

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

นั่นจะเป็นการตกแต่งผู้อ่านดั้งเดิมให้

  • ก่อนจะถูกบัฟเฟอร์
  • จากนั้นเปิดใช้งานฟังก์ชัน pushback / ยังไม่ได้อ่าน (ผลที่ได้คือบัฟเฟอร์ .. )

FilterReaderและReaderเป็นคลาสพื้นฐานในลำดับชั้น ...


และBufferedReader, FilterReaderและPushbackReaderเป็นของตกแต่งReaderใช่มั้ย?

1
ใช่ที่ถูกต้อง.
duffymo

1
ใช่ - BufferedReader สร้างบัฟเฟอร์ผู้อ่านพื้นฐาน PushbackReader ช่วยให้คุณสามารถ 'ยังไม่ได้อ่านข้อมูลจากเครื่องอ่าน ฯลฯ ..

11

มัณฑนากรรูปแบบใช้ที่นี่เพราะBufferedReaderwraps Reader- ก็ยังคงเป็นReader(มันมีทุกวิธีการของReader) แต่มันก็มีมากขึ้น "ระฆังและนกหวีด" (วิธีการอื่น ๆ อีกมากมาย)

นี่คือตัวอย่างที่แสดงให้เห็นว่าคลาส "ตกแต่ง" ฟังก์ชั่นการทำงานของคลาสนั้นถูกห่อหุ้มอย่างไรและคุณสามารถโยงมันเข้าด้วยกันเพื่อตกแต่ง:

        new BufferedReader(new FileReader(new File("some.file")));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.