在编程中,术语在何处以及如何使用WRAPPER,它有什么作用?

问题描述 投票:62回答:7

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

所以任何想法是什么意思呢;

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

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

c#
7个回答
109
投票

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

在描述经典设计模式时,也可以使用“包装器”一词。

包装对象以向其提供简化的界面通常被描述为“Facade”模式。包装纸是外立面。

有时您可能有一个适合特定接口的类,但您无法更改它的代码以使其符合该接口。您可以为该类创建一个实现接口的包装器,但它将大多数调用指向包装对象。这是'适配器'模式。包装器是适配器。

您描述的实例,其中有两个类可以使用不同的算法进行数组排序听起来像'策略'模式,您可以在其中提供对某个对象执行操作的方法,但用于该操作的算法可能会有所不同,具体取决于在该对象的结构上。

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

绝大多数包装器都存在以隐藏某种复杂性。


54
投票

Explanation by Analogy - What is wrapping?

示例1:Ipad“包裹”Iphone

ipad做了什么,iPhone不做?

除了一个有更大的屏幕外,它们基本上不是一回事吗?

Ipad“包装”了iphone:这意味着你拥有iphone本身的所有优点,并拥有更大屏幕的优势等。但从根本上说,在ipad中,有一款Iphone。

然后有什么不同?唯一不同的是外观:你有一个更大的屏幕,也许,你不能在Ipad上拨打电话。

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

它与“对象”完全相同。

.......内部有所有好东西,但外观不同。一个不同的包装器。

“Wrappers可能会暴露出与底层物体不同的特征”......好吧,但这意味着什么?

有时,包装器可能会限制您可以访问的内容。例如,即使埋在其中的Iphone具有该功能,ipad也可能限制您拨打电话的能力。

示例2:自动车作为手动车的包装

想想自动驾驶汽车和手动汽车。在幕后,在自动驾驶汽车中,有一些工程机制会自动为您改变档位,但从根本上说,在汽车表面下,汽车仍然是一辆手动汽车。换句话说,汽车的自动功能“包裹”了汽车的手动功能。如果你想在自动汽车中自己手动更换齿轮 - 你根本做不到。在自动车中,“不暴露”变换齿轮的能力。但它暴露在手动车中。虽然这个比喻有点紧张,但我希望你能看到我所得到的东西。

But what is the purpose of a wrapper?

如果你想简化一些事情,你会写一个包装类。您将创建一个易于使用的“包装器”,并将所有复杂的位留在包装器中,确保这些复杂的位不会“暴露”。

例如,您可以使用.net包装器,它在下面进行COM调用。如果您没有包装器,那么您将被迫自己进行这些COM调用。幸运的是,使用包装器,您只需调用.net包装代码 - 这将调用这些COM调用。这应该有希望为您简化一些事情。


9
投票

只是你编写了一些易于使用的代码来隐藏下面代码的复杂性。当您需要从更高级别的语言调用某些低级API并且希望隐藏所有“丑陋”代码时,它尤其有用。

编辑:你可以在这两篇wiki文章中找到更多关于它的信息:libraryfunction


4
投票

包装器是一些代码,用于在不更改实际API的情况下在内部调用某些API。

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


2
投票

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

DLL包装器

在过去,我已经围绕.NET DLL创建了一个COM包装器,以便在了解COM但不了解.NET的旧应用程序中使用.NET的高级功能。

对象包装器(Java)

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


2
投票

包装函数,一个主要用于调用第二个函数的函数


-1
投票

假设您要为代码添加更多功能,但无法更改代码。这就是包装器有用的地方。您可以使用包装器获取输出而不更改原始代码。

© www.soinside.com 2019 - 2024. All rights reserved.