C# 流体系结构中的流适配器

C# 流体系结构中的流适配器,c#,.net,io,C#,.net,Io,下面是一本简而言之的C#7.0中的图片: Q1从图中可以推断,只有后备存储流(如FileStream)可以直接“连接”到文件,但我们不是可以使用StreamReader/StreamWriter直接读取/写入文件吗 问题2本书还说: 适配器包装流,就像装饰器一样。然而,与装饰器不同,适配器本身不是流;它通常完全隐藏面向字节的方法 但是,图片中的StreamReader/StreamWriter等不是被标记为流适配器吗?如果它们不被视为流,那么它们如何被称为“流适配器” 如果它们不被视为流,那么

下面是一本简而言之的C#7.0中的图片:

Q1从图中可以推断,只有后备存储流(如FileStream)可以直接“连接”到文件,但我们不是可以使用StreamReader/StreamWriter直接读取/写入文件吗

问题2本书还说:

适配器包装流,就像装饰器一样。然而,与装饰器不同,适配器本身不是流;它通常完全隐藏面向字节的方法

但是,图片中的StreamReader/StreamWriter等不是被标记为流适配器吗?如果它们不被视为流,那么它们如何被称为“流适配器”

如果它们不被视为流,那么它们如何被称为“流适配器”

同样地,杯托也不能被视为杯子

我们不是可以使用StreamReader/StreamWriter直接读/写文件吗

StreamWriter/Reader在内部使用流。
从源代码:

如果它们不被视为流,那么它们如何被称为“流适配器”

同样地,杯托也不能被视为杯子

我们不是可以使用StreamReader/StreamWriter直接读/写文件吗

StreamWriter/Reader在内部使用流。
源代码:

Q1 只有备份存储流直接连接到特定的I/O资源。您可以使用
MemoryStream
将数据流读/写到内存中。
StreamWriter
使用例如
MemoryStream
来完成此操作。因此,它不是直接访问I/O资源。创建任何流适配器类型(例如
StreamWriter
)的实例时,必须将备份存储流传递给构造函数(例如
newstreamwriter(new MemoryStream())
),然后适配器流使用该构造函数从特定资源读/写特定资源。因此,
StreamWriter
对文件或内存等的访问是间接的。读/写操作被委派给底层备份存储流。
命名约定也表达了这种关系。它是StreamReader,而不是ReadableStream。它从一条小溪读。它是一个XMLWriter,而不是XmlStream(或FileStream)

问题2 适配器连接两个不兼容的接口或模块。在图形中,您可以清楚地看到流适配器的任务是将简单文本、XML等连接到基于字节表示的流对象。适配器向使用者隐藏底层流详细信息。例如,这允许您使用
StreamWriter
以更方便的方式将普通
字符串
写入
,而不考虑实际的字节表示(流本身只知道字节)。适配器知道如何转换不兼容的数据以使其兼容。这就是适配器的本质。因为它将流不兼容的数据输入/输出连接到实际流,所以称为“流适配器”。它能适应水流

装饰器扩展装饰对象的行为。它实现装饰对象的基类型,并包装实际实现以扩展其行为。这允许在不违反开闭原则的情况下向现有对象添加特征。因此,当包装(装饰)对象被扩展(修改)时,包装(装饰)对象就不会被修改

流适配器通过转换数据并将数据委托给流来使用流。装饰器流是一个流,它扩展了行为

流适配器和流装饰器都是设计模式的实现:和 只有备份存储流直接连接到特定的I/O资源。您可以使用
MemoryStream
将数据流读/写到内存中。
StreamWriter
使用例如
MemoryStream
来完成此操作。因此,它不是直接访问I/O资源。创建任何流适配器类型(例如
StreamWriter
)的实例时,必须将备份存储流传递给构造函数(例如
newstreamwriter(new MemoryStream())
),然后适配器流使用该构造函数从特定资源读/写特定资源。因此,
StreamWriter
对文件或内存等的访问是间接的。读/写操作被委派给底层备份存储流。
命名约定也表达了这种关系。它是StreamReader,而不是ReadableStream。它从一条小溪读。它是一个XMLWriter,而不是XmlStream(或FileStream)

问题2 适配器连接两个不兼容的接口或模块。在图形中,您可以清楚地看到流适配器的任务是将简单文本、XML等连接到基于字节表示的流对象。适配器向使用者隐藏底层流详细信息。例如,这允许您使用
StreamWriter
以更方便的方式将普通
字符串
写入
,而不考虑实际的字节表示(流本身只知道字节)。适配器知道如何转换不兼容的数据以使其兼容。这就是适配器的本质。因为它将流不兼容的数据输入/输出连接到实际流,所以称为“流适配器”。它能适应水流

装饰器扩展装饰对象的行为。它实现装饰对象的基类型,并包装实际实现以扩展其行为。这允许在不违反开闭原则的情况下向现有对象添加特征。因此,当包装(装饰)对象被扩展(修改)时,包装(装饰)对象就不会被修改

流适配器通过转换数据并将数据委托给流来使用流。装饰器流是一个流,它扩展了行为