装饰器模式和适配器模式有什么区别?

3
在什么情况下,使用适配器模式或装饰器模式会更好?
欢迎提供真实程序的例子。
2个回答

13

我认为这些不能互换使用。

适配器将对象的接口更改以适应另一个接口。装饰器在保持接口的同时添加功能。

public class Foo
{
}

public class Bar
{
}

// adapter takes Foo and pretends it is Bar
public class FooBarAdapter : Bar
{
   public FooBarAdapter( Foo foo )
   {
   }
}

// decorator maintains the interface and adds features
public class FooDecorator : Foo
{
    public FooDecorator( Foo foo )
    {
    }
}

嗯..我以为这些模式可以互换使用。谢谢你的样例! - Roman Ukr
1
有人误导了你。适配器和装饰器没有关联,我几乎想不出这两者可以相互应用的场景。 - Wiktor Zychla
1
@WiktorZychla 我认为问题在于这两个模式都使用组合来封装一个成员对象,这就是人们可能认为它们相似的原因。当然,关键点在于使用该对象来公开的接口。 - goelakash

5

我在那里。谢谢!:) 请问,在哪些情况下更好使用适配器模式,哪些情况下使用其他模式更合适?(我指的是“现实生活”中) - Roman Ukr
如果您想要让两个系统之间进行通信,可以使用适配器来实现。而如果您想要为您的对象添加功能,则可以使用装饰器。非常乐意为您提供帮助。 - Aghilas Yakoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接