什么是包装类?

Bha*_*kar 216 design-patterns wrapper

什么是包装类?
这些课程有用吗?

Pau*_*ier 167

通常,包装类是"包装"或"封装"另一个类或组件的功能的任何类.通过提供底层类或组件的实现的抽象级别,这些是有用的; 例如,包装COM组件的包装类可以管理调用COM组件的过程,而无需用它来打扰调用代码.它们还可以通过减少所涉及的接口点数来简化底层对象的使用; 通常,这可以更安全地使用底层组件.

  • 当包装器必须遵循特定接口并且必须支持多态行为时,使用包装类(作为适配器).另一方面,当需要更简单或更简单的界面时,使用外观. (15认同)
  • 在这篇文章中,建议包装器可用于为后期绑定类创建严格定义的代理:[我可以使用后期绑定...](http://stackoverflow.com/questions/8911845/可以,我使用的后期绑定到入住的存期的一库 - 使用 - 它 - 通过-E之前,#8921689).除了上面描述的Paul Sonier之外,这是否是包装纸的有效附加用途? (2认同)
  • @NirajanSingh Wrapper 重用两个已经存在的接口,并使一个接口与另一个接口兼容。另一方面,门面创建了一个新的界面。 (2认同)

Sho*_*og9 67

听起来是这样的:一个类在一个更简单或仅仅不同的API中"包装"另一个类或API的功能.

请参阅:适配器图案,外观图案


小智 40

包装类提供了一种将基本类型用作对象的方法.对于每个原语,我们有一个包装类,如,

int Integer
byte Byte 
Run Code Online (Sandbox Code Playgroud)

Integer和Byte是原始int和byte的包装类.当您需要将基元用作对象时,有时间/限制因此包装类提供称为装箱/拆箱的机制.

以下示例可以很好地理解概念

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
Run Code Online (Sandbox Code Playgroud)

所以这就是方法,我们也可以使用包装类类型转换成其他原始类型.当您需要将基本类型转换为对象并使用它们来获取其他基元时,将使用这种类型的转换.尽管如此,您还需要编写一个大代码.然而,使用简单的铸造技术可以实现相同的目的,因为可以如下实现代码片段

double d = 135.0;
int integerValue = (int) d ;
Run Code Online (Sandbox Code Playgroud)

虽然double值显式转换为整数值,也称为向下转换.

  • 您的答案意味着包装类仅适用于原始对象。 (3认同)
  • 您的答案仅在严格的 **Java** 术语中有效,而原始问题与语言无关。 (2认同)

ral*_*nja 17

包装类不一定需要包装另一个类.它可能是一个API类包装功能,例如dll文件.

例如,创建一个dll包装器类可能非常有用,它负责所有的dll初始化和清理,并创建包装从例如创建的函数指针的类方法GetProcAddress().

干杯!


Ree*_*sey 8

包装类是一个"包装"其他东西的类,就像它的名字一样.

更正式的定义是实现适配器模式的类.这允许您将一组API修改为更可用,可读的形式.例如,在C#中,如果要使用本机Windows API,则有助于将其包装到符合.NET设计准则的类中.

  • 通过我对适配器模式的理解,它与包装器不同:如果X包装Y,那么X应该封装Y的*state*,但*不是它的身份*.给定两个X的实例,两者都包装Y,应该没有办法证明X的两个实例都包含*的相同*Y实例.相比之下,适配器对象通常会封装身份而不是状态; 对正在调整的对象的更改不会被视为对适配器本身的更改. (2认同)

Bil*_*win 8

有几种设计模式可以称为包装类.

请参阅我对" 代理,装饰器,适配器和桥接模式有何不同? "的回答.


Jhe*_*ico 7

值得注意的是,在某些环境中,包装类可能做的大部分内容都被方面所取代.

编辑:

一般来说,包装器会扩展包装器所做的事情,而不用担心包装器的实现,否则没有必要包装而不是扩展包装类.一个典型的例子是在一些其他服务接口周围添加定时信息或记录功能,而不是将其添加到该接口的每个实现.

这最终成为Aspect编程的典型示例.您可以在方面编程中定义切入点,这是方法的一种正则表达式,然后声明要在所有方法匹配之前,之后或周围执行的方法,而不是按功能遍历接口函数并添加样板记录.切入点.可以公平地说,方面编程是Decorator模式的一种使用,也可以使用包装类,但这两种技术都有其他用途.


小智 7

包装类是一个包装另一个类的类,它提供了客户端和被包装的原始类之间的抽象.


Ami*_*rad 5

包装类通常是一个将对象作为私有属性的类.包装器实现了私有对象的API,因此它可以作为私有对象所在的参数传递.

假设你有一个集合,并且你希望在添加对象时使用某种翻译 - 你编写一个包含所有集合方法的包装类.当调用add()时,包装器会转换参数,而不是仅将它们传递给私有集合.

包装器可以在任何可以使用集合的地方使用,私有对象仍然可以有其他对象引用它并读取它.