我遇到软件开发人员使用创建其他类或API的Wrappers或甚至某些代码的术语,这是经验丰富的软件程序员使用的术语
所以任何想法是什么意思呢;
例如一个简单的问题;我们有两种类型的数组排序技术,让我们为它创建一个包装器
以上是一个非常简单的例子
“包装”这个词被大量抛出。通常,它用于描述包含另一个类的实例但不直接公开该实例的类。包装器的主要目的是提供一种“不同”的方式来使用包装对象(也许包装器提供了一个更简单的接口,或者添加了一些功能)。
在描述经典设计模式时,也可以使用“包装器”一词。
包装对象以向其提供简化的界面通常被描述为“Facade”模式。包装纸是外立面。
有时您可能有一个适合特定接口的类,但您无法更改它的代码以使其符合该接口。您可以为该类创建一个实现接口的包装器,但它将大多数调用指向包装对象。这是'适配器'模式。包装器是适配器。
您描述的实例,其中有两个类可以使用不同的算法进行数组排序听起来像'策略'模式,您可以在其中提供对某个对象执行操作的方法,但用于该操作的算法可能会有所不同,具体取决于在该对象的结构上。
例如,对于长度小于100的数组,您的排序算法之一可能很好,但是性能可能是它的问题。另一种算法可能适用于较大的阵列。您可以为支持排序操作的两种算法创建“包装器”,但根据数组长度决定使用哪种算法。
绝大多数包装器都存在以隐藏某种复杂性。
ipad做了什么,iPhone不做?
除了一个有更大的屏幕外,它们基本上不是一回事吗?
Ipad“包装”了iphone:这意味着你拥有iphone本身的所有优点,并拥有更大屏幕的优势等。但从根本上说,在ipad中,有一款Iphone。
然后有什么不同?唯一不同的是外观:你有一个更大的屏幕,也许,你不能在Ipad上拨打电话。
它与“对象”完全相同。
.......内部有所有好东西,但外观不同。一个不同的包装器。
“Wrappers可能会暴露出与底层物体不同的特征”......好吧,但这意味着什么?
有时,包装器可能会限制您可以访问的内容。例如,即使埋在其中的Iphone具有该功能,ipad也可能限制您拨打电话的能力。
想想自动驾驶汽车和手动汽车。在幕后,在自动驾驶汽车中,有一些工程机制会自动为您改变档位,但从根本上说,在汽车表面下,汽车仍然是一辆手动汽车。换句话说,汽车的自动功能“包裹”了汽车的手动功能。如果你想在自动汽车中自己手动更换齿轮 - 你根本做不到。在自动车中,“不暴露”变换齿轮的能力。但它暴露在手动车中。虽然这个比喻有点紧张,但我希望你能看到我所得到的东西。
如果你想简化一些事情,你会写一个包装类。您将创建一个易于使用的“包装器”,并将所有复杂的位留在包装器中,确保这些复杂的位不会“暴露”。
例如,您可以使用.net包装器,它在下面进行COM调用。如果您没有包装器,那么您将被迫自己进行这些COM调用。幸运的是,使用包装器,您只需调用.net包装代码 - 这将调用这些COM调用。这应该有希望为您简化一些事情。
包装器是一些代码,用于在不更改实际API的情况下在内部调用某些API。
这方面的一个例子是Facebook发布他们的Facebook C#SDK。 SDK实际上是一个包装器,因为它只允许您调用其底层平台而不提供特定的方法和类。另一方面,Facebook Developer Toolkit是其完整的API。
有许多“包装”的例子,这个术语有时可以互换使用。以下是一些想到的例子:
DLL包装器
在过去,我已经围绕.NET DLL创建了一个COM包装器,以便在了解COM但不了解.NET的旧应用程序中使用.NET的高级功能。
对象包装器(Java)
在Java中,java.lang
包中提供了一个类,用于为八种基本类型提供对象方法。 Java中的所有原始包装类都是不可变的。因此,当需要Wrapper
时,Object
类用于表示原始值。
包装函数,一个主要用于调用第二个函数的函数
假设您要为代码添加更多功能,但无法更改代码。这就是包装器有用的地方。您可以使用包装器获取输出而不更改原始代码。