我发现old post并不能阐明我对包装类使用的设计模式的理解, 而且,从维基百科阅读后,我没有得到任何明确的信息。
包装器类是否真的使用任何设计模式?
如果使用的是模式,那么是Decorator Pattern
,Facade Pattern
或Adapter Pattern
中的哪个模式?
答案 0 :(得分:9)
如果您引用包装原始语言
包装器类提供了一种将原始类型用作对象的方法
Adapter模式是最确切的含义:
装饰器可以在运行时添加或更改接口的行为。另外,当包装器必须尊重特定的接口并且必须支持多态行为时,可以使用适配器,而当需要更简单或更简单的基础对象接口时,可以使用Facade。
我们使用Wrapper类功能将基本类型用作对象,这意味着增加对多态行为的支持
答案 1 :(得分:5)
所有三种设计模式都以某种方式描述了包装器:
答案 2 :(得分:3)
它们不遵循您提到的任何设计模式。
适配器将类的接口转换为另一个接口。基元不实现任何接口。
装饰器通过将其包装在另一个实现相同接口的类中,将行为添加到实现一个接口的类中。基元不实现任何接口。
外观的目的是掩盖包装对象的复杂行为。编程语言中没有什么比原始语言更复杂了。线索就是名字。如果有的话,包装器类与此相反。
在我这里的最上方,这是他们确实使用的一些设计模式:
Integer
,Long
和Byte
使用object pool个对象中的flyweight个,以避免creating unnecessary instances。
Boolean
有些试图成为multiton(因为不赞成使用构造函数),但实际上并非如此。
答案 3 :(得分:3)
好吧,答案似乎表明您可以出于多种原因包装对象,因此有很多模式。因此,我将尝试给出更笼统的答案。
包装器基本上是一个对象,其唯一目的是在不修改主对象的情况下提供某些东西(添加功能,简化API,序列化……参见其他答案),包装器通常与“主”对象紧密耦合。例如,看看其他答案。
对于包装的某些用法,另一种替代方法是继承,但并非每种情况都适用。
因此,包装器只是做某些事情的技术方法。它本身不是一种模式。
答案 4 :(得分:1)
包装器类使用组成。与流行的格言“ 继承中的偏爱组成”相同。组成不是设计模式;它不是设计模式。但是,大多数OO设计模式都将组合作为其实现的一部分。这是许多人努力区分不同设计模式的原因之一:合成的普遍使用使它们在一定程度上看起来都相同。
组成关系中有两个基本部分:作曲者和被组成者。您通常可以将其视为部分/整个关系。可以是一对一或一对多。 包装器是作曲者,即整体。它可能会包裹一个或多个组成部分。
许多不同的设计模式出于不同的目的使用一般的构成关系。这些不同的模式中有许多统称为“包装器”。 GoF书中至少提到了两种这样的模式。
ADAPTER Also Known As Wrapper
第139页DECORATOR Also Known As Wrapper
第175页
总而言之,包装器不是任何单一的设计模式;而是一种设计模式。顺便说一句,我们看到术语 Factory 具有相同的动态。没有名为Factory的单一设计模式。而是一种设计模式。