classDiagram class Reader { <> +ReadLine() string* +EndOfStream bool +Close() } class FileReader { -StreamReader _streamReader +ReadLine() string* } class ReaderDecorator { <> #Reader _reader +ReadLine() string* } class CSVReader { +ReadLine() string* +ReadCSVLine() string[]* } class EntityReader~T~ { <> #IEntityFactory~T~ _factory +ReadEntity(id: int) T* } class MorgReader { +ReadEntity(id: int) Morg* } Reader <|-- FileReader : concrete Reader <|-- ReaderDecorator : abstract decorator ReaderDecorator <|-- CSVReader : decorates with CSV parsing ReaderDecorator <|-- EntityReader~T~ : decorates with entity creation EntityReader~T~ <|-- MorgReader : Morg specialisation ReaderDecorator *-- Reader : wraps note for ReaderDecorator "Decorator wraps Reader component" note for CSVReader "Adds CSV parsing functionality" note for EntityReader~T~ "Adds entity creation using Factory" note for MorgReader "Morg-specific entity creation"