WRAPPER 这个术语在编程中使用的位置和方式,它有什么帮助?

我遇到软件开发人员使用的术语创建包装的其他类或 API,甚至一些代码,这是经验丰富的软件程序员使用的术语

所以你知道他们说的是什么意思吗

例如,一个简单的问题; 我们有两种类型的数组排序技术,让我们为它创建一个包装器

以上是一个非常简单的例子

97044 次浏览

这只是因为您编写了一些易于使用的代码来隐藏底层代码的复杂性。当您需要从更高级的语言调用一些低级 API 并且想要隐藏所有“丑陋”代码时,它尤其有用。

编辑: 你可以在这两篇维基文章中找到更多关于它的信息: 图书馆功能

A Wrapper is some code that is created to internally call some API without changing the actual API.

这方面的一个例子是 Facebook 发布了他们的 Facebook C # SDK。SDK 实际上是一个包装器,因为它只允许您调用它的底层平台,而不提供特定的方法和类。另一方面,Facebook 开发者工具包是它的完整 API。

有许多“包装器”的例子,这个术语有时可以互换使用。下面是我想到的几个例子:

DLL 包装器

In the past I have created a COM wrapper around a .NET DLL in order to use the advanced features of .NET in older applications which understand COM but do not understand .NET.

Object Wrapper (Java)

在 Java 中,在 java.lang包中提供了一个类来为八种基本类型提供对象方法。Java 中的所有原语包装类都是不可变的。因此,当需要 Object时,Wrapper类用于表示基元值。

“包装”这个词经常被人提起。通常用于描述包含另一个类的实例但不直接公开该实例的类。包装器的主要目的是提供一种“不同”的方式来使用包装对象(也许包装器提供了一个更简单的接口,或者添加了一些功能)。

“包装器”这个词也可以用来描述经典的设计模式。

Wrapping an object to provide a simplified interface to it is often described as the 'Facade' pattern. The wrapper is the facade.

有时,您可能有一个适合特定接口的类,但是您不能更改该类的代码以使其符合该接口。您可以为这个类创建一个包装器,它实现接口,但是将大部分调用定向到包装对象。这是“适配器”模式。包装器就是适配器。

你描述的这个例子,你有两个类可以使用不同的算法进行数组排序,听起来像“策略”模式,你提供了一种对某个对象执行操作的方法,但是这个操作所使用的算法可能会因该对象的结构不同而不同。

例如,对于长度小于100的数组,您的排序算法之一可能非常好,但是性能可能是它的一个问题。另一种算法可能适用于更大的数组。您可以为这两种算法创建一个“包装器”,它支持排序操作,但是根据数组长度决定使用哪种算法。

绝大多数包装器的存在是为了隐藏某种复杂性。

包装函式是一个函数,其主要目的是调用第二个函数

浅谈类比解释

例1: 一个 Ipad“包装”一个 Iphone

An iphone is the only thing inside an Ipad. The Ipad literally wraps the Iphone. Except you can't make calls with an Ipad because the ability to make phone calls have not been "exposed". Apple want you to buy x2 products not just one :P

Ipad 基本上是一个大号的 Iphone... ... 它基本上是一个 Iphone,但是有一个不同的外观(更大的屏幕)。也就是说,Ipad 有一个不同的“包装”。

这和“物体”是一回事。

“ Wrappers 可能会暴露与底层对象不同的特性” ... ... 好吧,但是这意味着什么呢?

有时,包装器可能会限制您在内部可以访问的内容。例如,iPad 可能会限制你打电话的能力,即使隐藏在其中的 Iphone 也有这种能力。

例2: 自动汽车充当手动汽车的包装

想想一辆自动驾驶汽车和一辆手动驾驶汽车。

在自动驾驶汽车中,有一种工程机械可以自动为你更换齿轮,但从根本上说,在表面之下,汽车仍然是一辆手动驾驶汽车。

In other words, the automatic features of the car "wraps" the manual functionality of the car.

如果你想在自动汽车里手动换档,你根本做不到。在自动汽车中,换档的能力“不会暴露”。但是它暴露在手动车里。虽然这个比喻有点牵强,但我希望你明白我的意思。

但是包装的目的是什么呢?

如果你想简化事情,你可以编写一个包装类。把所有复杂的位留在包装内,确保那些复杂的位不会“暴露”。

示例-代码中使用的包装器

  1. Pysch: 这是一个用红宝石包装的 libyaml,我相信是用 C 语言写的。如果你想用 libyaml 但是 Ruby 你有什么选择?Pysch 允许您使用 Ruby 编写代码,同时在下面获得 libyaml 的所有好处。它“包裹”利比亚。

  2. .Net wrappers: 例如,您可以有一个。网络包装器,其下,使 COM 调用。如果您没有包装器,那么您将被迫自己进行这些 COM 调用。幸运的是,有了包装纸,你就可以打电话给。Net 包装代码-这将反过来使这些 COM 调用。希望这能让你的生活变得简单。AutoCAD.Net API 就是一个很好的例子。它是 ObjectARXAPI 的包装器。

假设您希望向代码中添加一些更多的功能,但是您不能更改代码。这就是包装纸的作用。您可以使用包装器获取输出,而无需更改原始代码。

在系统架构级别使用包装器的一个实际例子是,您的服务器上有一个执行某些进程的程序,您通过开发一个包装器以多个 Web 服务的形式提供该程序的处理能力。在这里,除了提供接口来访问 web 上程序的功能之外,包装器还可以为它提供一些默认值/安全输入。