2010-07-20 90 views
49

我遇到的软件开发人员使用创建其他类或API,甚至有些代码的包装器的来看,这是由经验丰富的软件编程WRAPPER在编程中在哪里以及如何使用,它有什么帮助?

使用的一个术语所以任何想法是什么,他们的意思是它;

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

的包装上面一个是一个很简单的例子

回答

78

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

'wrapper'这个词在描述经典设计模式时也可以使用。

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

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

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

例如,对于长度小于100的数组而言,其中一种排序算法可能非常适用,但性能可能会成为问题。另一种算法可能适用于更大的阵列。您可以为支持排序操作的两种算法创建一个'包装器',但根据数组长度决定使用哪种算法。

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

+4

哦,明白了......谢谢:) 一个非常详细的答案,解决了我的包装问题:) – 2010-07-22 08:23:56

8

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

编辑:你可以找到更多关于它在这两个维基文章:libraryfunction

3

一个封装是创建内部调用一些API不改变实际的API的一些代码。

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

+0

我需要编写一个C#程序,创建一个脚本文件(脚本语言是特定于硬件设备,被称为' CoraScript')。 CoraScript中有大约50个左右的命令,例如,一个连接到设备,一个将文件发送到该设备,告诉它在其闪存中执行应用程序等。而不是手动编写CoraScript,我想创建一个C#库,它将生成这样的脚本。这个C#库会被称为CoraScript脚本语言的“包装库”吗? – 2017-11-09 18:39:59

+0

该脚本语言的命令行解释器是一个控制台应用程序。当该应用程序运行时,它需要CoraScript命令,执行它们并返回该命令的输出(例如,“Connect localhost”CoraScript命令将返回字符串“+ connect”,coralib3.dll版本1,8,11“'以指示该命令已成功执行)。 – 2017-11-09 18:44:40

2

有很多“包装”的例子,这个词有时可以互换使用。下面是几个例子浮现在脑海:

DLL包装

在我已经为了使用较旧的应用程序的.NET的高级功能创建围绕.NET的DLL COM包装过去的这理解COM但不了解.NET。

对象包装(爪哇)

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

4

包装函数,函数的主要目的是调用第二功能

+2

这个答案比4年前写的更有用吗?尝试并回答合法的问题,而不是那些在很久以前被问过的很多投票都能接受的答案。 – rayryeng 2014-12-10 18:43:52

31

大多数这些解释都是技术和杀死我的脑细胞:简单的解释:

什么包装?

当苹果的ipad出来时,我很困惑。 ipad做了什么,iPhone不做?他们不是基本上是一样的东西,除了有一个更大的屏幕?换句话说,ipad就像Iphone一样,只是它有一个更大的屏幕--Ipad“包装”了iphone。这意味着你有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

严格地讲,它与“物”同样的事情的好处。

.............里面的所有东西都是一样的,但外观不同。一个不同的包装。

(下面这意味着什么简单解释)“包装可以比底层对象公开不同的功能”:

有时包装可能会限制你可以访问里面的东西。例如,ipad可能会限制您拨打电话的能力,即使埋入其中的Iphone具有此功能。

又如

思考的自动车,和手动车。在幕后,在一辆自动驾驶汽车中,有一些工程机构可以为您自动换档,但从根本上来说,在汽车表面下,汽车仍然是一辆手动车。换句话说,汽车的自动功能“包装”汽车的手动功能。如果您想在自动驾驶汽车中手动更换齿轮 - 您根本无法做到。在自动驾驶汽车中更换齿轮的能力“没有暴露”。但它被暴露在手动汽车中。当然,这个比喻有点紧张,但我希望你能看到我的所作所为。

现在结合这个解释与上面的我,我想你会有更多的运气了解发生了什么!任何问题,请免费评论,我会尽力为你解决:)

+0

我在解释技术术语时喜欢这些有点解释。你知道有哪些网站专门做这件事吗?谢谢。 – vira 2018-02-22 19:24:33

+1

是肯定有这样的网站,但我忘了它是什么 – BKSpurgeon 2018-02-22 23:06:06

相关问题