Il pattern "Decorator" descrive lo scenario in cui ci sono una serie di oggetti denominati con i termini "componente", "componente concreto", "decoratore" e "decoratore concreto".
Nel caso del package java.io (modellato appunto sul Decorator), classi come FileReader, FileWriter, FileInputStream e FileOutputStream NON sono decoratori. Sono componenti concreti!
Per es. BufferedWriter è un decoratore, perché a) è-un Writer, e b) contiene (incapsula) un altro Writer.
Mentre FileWriter è un componente concreto, "finale" nel senso che opera su un qualcosa di ben preciso (esclusivamente su un file) e non incapsula "altro".
InputStreamReader invece è più un "adapter" che un "decorator", perché in effetti fa cambiare completamente faccia allo stream. Infatti contiene un InputStream ma InputStreamReader non è-un InputStream ma bensì un Reader.


Rispondi quotando