包装器和适配器有什么区别?
由于它们都包裹另一个对象并提供额外的功能,为什么有两个单独的名称?
STL智能指针也是包装器或适配器吗?
答案 0 :(得分:3)
几乎是一样的。唯一的区别是,如果您的类提供的新接口具有与基本相同(或几乎相同)的功能,则最好将其称为 adapter 。
如果您的类添加了一些新功能(例如对基类输出的一些额外处理),最好将其称为 wrapper 。
智能指针是包装器,因为它们为基类添加了额外的功能(引用计数)。
答案 1 :(得分:3)
Wrappers通常存储基本类型并添加类型不支持/支持错误的操作。
当类的接口不是所需的接口时使用适配器,并在更改接口时提供包装效果。
区分这两者的一种方法是,通常通过私有继承实现适配器。这种实现通常不适用于包装基元的包装器。
基于此,我会将智能指针称为 wrappes
答案 2 :(得分:1)
软件工程中的“包装器”一词非常过载。当您不想(或不能)更具体时,可以使用它。基本上,每当你在某些东西周围添加一个额外的层以便不能(或不应该)直接访问这个“某些东西”时,无论出于何种原因,你都可以“包裹”它。包装的组件可能太低级,可能不完整,您可能想要为其添加缓存,您可能只是想减少编译时间......或者您可以想到的任何原因。单独的“包装”这个词并不能告诉你更多。
因此,当你说智能指针是原始指针的包装器时,没有人会反对。智能指针可防止直接访问原始指针(如果需要,则允许它,但提醒您不应该正常执行)。这使它成为一个包装。
“适配器”是一个稍微具体的词。这意味着软件组件具有您需要的功能,但是以形式错误的方式公开,因此您需要在原始组件周围添加一个层,以使其界面符合您的需求。适应某种东西是一种特殊的包装方式。我不会将智能指针称为适配器。 “适应”意味着功能基本不变,但只有界面的名称和形式不同 - 智能指针不适用。
要点: