你好。我是用设计模式一点点了解的,看不懂这些模式的区别。在某些地方,它们被认为是同义词。我好像发现了adapter和decorator的区别(按我的理解,第一个实现的接口与被包装对象的接口不同;而第二个实现的是与被包装对象相同的接口)。但是我找不到适配器与说唱歌手(包装器)有何不同。也不清楚代理与装饰器有何不同。PS 代码示例需要立即看到差异和相似之处。
你好。我是用设计模式一点点了解的,看不懂这些模式的区别。在某些地方,它们被认为是同义词。我好像发现了adapter和decorator的区别(按我的理解,第一个实现的接口与被包装对象的接口不同;而第二个实现的是与被包装对象相同的接口)。但是我找不到适配器与说唱歌手(包装器)有何不同。也不清楚代理与装饰器有何不同。PS 代码示例需要立即看到差异和相似之处。
首先,稍微澄清一下:Wrapper 是 decorator 的同义词。那。这个问题实际上是关于三种模式:装饰器、适配器和代理。
所有这些模板的相似之处在于它们在类周围创建了某种“包装器”。所以你的话基本上是正确的:
但是,它们的不同之处在于它们提供的接口以及它们对原始类的功能所做的事情(阅读,刀的外观和用途)。
代理包装一个类并提供相同的接口。目标是“假装”为原始类并向客户端隐藏详细信息。典型的用例是包装类的惰性初始化或包装对第三方服务的调用。
装饰器还包装一些类并提供相同或扩展的接口。有时装饰器被称为“智能代理”。那些。装饰器可以伪装成原始类并仍然扩展其功能。示例:您有一个隐藏对第三方服务的调用的代理。您可以创建一个装饰器来包装和缓存调用结果。又如:你需要扩展原有类的功能,但它因继承而关闭。创建一个装饰器来扩展原始类的接口。
适配器也包装了一个类,但提供了不同的接口。那些。在存在具有所需数据和行为但具有不适当接口的类的情况下使用。
全部的:
至于他们怎么看代码层面的。实现当然可能会有所不同,因此要确定哪个是哪个,请使用以下步骤:
装饰器 (Wraper) 允许您创建一系列包装器,每个包装器都会向原始对象添加一些东西。丰富了它的功能。有一个逐字节的读取,一旦缓冲被添加为包装器,然后是其他东西......等等。
Adapter——中介,适配器。例如,将数据从一种格式转换为另一种格式,以便两个独立的库可以彼此一致(例如,XML 和 JSON)。
代理是一种替代品(就像银行支票是一叠现金的替代品)。这是一个临时替代原件的替身。
这里非常清楚易懂: https ://refactoring.guru/ru/design-patterns/catalog