包装类在Java中使用的设计模式?

时间:2018-11-15 08:34:47

标签: design-patterns adapter decorator wrapper facade

我发现old post并不能阐明我对包装类使用的设计模式的理解,  而且,从维基百科阅读后,我没有得到任何明确的信息。

包装器类是否真的使用任何设计模式?

如果使用的是模式,那么是Decorator PatternFacade PatternAdapter Pattern中的哪个模式?

5 个答案:

答案 0 :(得分:9)

如果您引用包装原始语言

  

包装器类提供了一种将原始类型用作对象的方法

Adapter模式是最确切的含义:

  

装饰器可以在运行时添加或更改接口的行为。另外,当包装器必须尊重特定的接口并且必须支持多态行为时,可以使用适配器,而当需要更简单或更简单的基础对象接口时,可以使用Facade。

我们使用Wrapper类功能将基本类型用作对象,这意味着增加对多态行为的支持

答案 1 :(得分:5)

所有三种设计模式都以某种方式描述了包装器:

  • 装饰图案。包装组件,并可能用其他一些特征 装饰
  • 适配器模式。只需包装一个组件即可为消费者提供合适的界面。
  • 门面图案。包装组件以方便使用其他复杂的外部接口。

答案 2 :(得分:3)

它们不遵循您提到的任何设计模式。

适配器将类的接口转换为另一个接口。基元不实现任何接口。

装饰器通过将其包装在另一个实现相同接口的类中,将行为添加到实现一个接口的类中。基元不实现任何接口。

外观的目的是掩盖包装对象的复杂行为。编程语言中没有什么比原始语言更复杂了。线索就是名字。如果有的话,包装器类与此相反。


在我这里的最上方,这是他们确实使用的一些设计模式:

IntegerLongByte使用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的单一设计模式。而是一种设计模式。