【问题标题】:What are the differences between the Decorator and Adapter patterns? [duplicate]装饰器模式和适配器模式有什么区别? [复制]
【发布时间】:2013-07-18 18:45:27
【问题描述】:

在什么情况下使用适配器或装饰器模式更好?

欢迎提供真实程序的示例。

【问题讨论】:

    标签: c# design-patterns


    【解决方案1】:

    我不认为这些可以互换使用。

    适配器改变一个对象的接口以使其适应另一个接口。装饰器在添加功能的同时维护界面。

    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 )
        {
        }
    }
    

    【讨论】:

    • 嗯.. 我认为这些模式可以互换使用。感谢您的样品!
    • 有人误导了你。 Adapter 和 Decorator 没有关系,我几乎想不出这两者可以相互应用的场景。
    • @WiktorZychla 我认为问题在于这两种模式都使用组合来封装成员对象,这就是人们可能认为它们相似的原因。当然,这里的关键点是使用该对象公开的接口。
    【解决方案2】:

    你有这些带有 uml 图表代码和解释的链接

    适配器:http://www.dofactory.com/Patterns/PatternAdapter.aspx

    => 匹配不同类的接口

    装饰者:http://www.dofactory.com/Patterns/PatternDecorator.aspx

    => 为对象动态添加职责

    【讨论】:

    • 我在那里。谢谢!:) 请告诉我,在哪里使用适配器更好,在哪里使用另一种模式? (我的意思是在“现实生活”中)
    • 很高兴为您提供帮助,如果您想与两个系统通信,请使用适配器以适应通信,但使用装饰器为您的对象添加功能
    猜你喜欢
    • 2017-04-21
    • 2012-01-09
    • 2011-02-04
    • 1970-01-01
    • 2017-08-01
    • 2011-01-15
    • 1970-01-01
    • 2014-02-20
    • 2013-09-08
    相关资源
    最近更新 更多