Q1
Только потоки резервного хранилища подключаются напрямую к конкретному ресурсу ввода-вывода.Вы используете MemoryStream
для чтения / записи потока данных в память.StreamWriter
использует a, например MemoryStream
для достижения этой цели.Таким образом, он не имеет прямого доступа к ресурсам ввода / вывода.При создании экземпляра любого типа потокового адаптера (например, StreamWriter
) вы должны передать поток резервного хранилища конструктору (например, new StreamWriter(new MemoryStream())
), который поток адаптера затем использует для чтения / записи из / в конкретный ресурс.Таким образом, доступ StreamWriter
к файлу или памяти является косвенным.Операции чтения / записи делегируются базовому потоку резервного хранилища.
Соглашение об именах также выражает эту связь.Это поток Reader , а не ReadableStream.Он читает из потока.Это XML Writer , а не XmlStream (или FileStream).
Q2
Адаптер соединяет два несовместимых интерфейса или модуля.На графике ясно видно, что задачей потокового адаптера является подключение, например, простого текста, XML к объекту потока на основе представления байтов.Адаптер скрывает детали основного потока для потребителя.Это позволяет, например, использовать StreamWriter
для записи простого string
в Stream
более удобным способом, не заботясь о реальном представлении байтов (сам поток знает только байты).Адаптер знает, как преобразовать несовместимые данные, чтобы сделать их совместимыми.Это природа адаптера.Поскольку он соединяет поток / несовместимый ввод / вывод данных с реальным потоком, он называется «Адаптер потока».Он адаптируется к потоку.
Декоратор расширяет поведение декорируемого объекта.Он реализует базовый тип декорированного объекта и оборачивает фактическую реализацию, чтобы расширить его поведение.Это позволяет добавлять функции к существующему объекту, не нарушая принцип Open Closed.Поэтому, когда обернутый (декорированный) объект расширяется (модифицируется), тогда обертывающий (декорирующий) объект защищен от модификации.
Потоковый адаптер использует поток путем преобразования и делегирования данных ему.,Поток декоратора является потоком и расширяет его поведение.
Оба Потоковых адаптера и Потоковые декораторы являются реализациями шаблонов проектирования: Шаблон адаптера и Шаблон декоратора