Design patterns 扩展装饰器
我指的是维基百科上关于装饰模式的文章,我发现它非常有用。我在大多数decorator模式示例(包括上面的示例)中发现,decorator不添加自己的属性/方法,只修改合同中定义的属性/方法。例如,咖啡制作示例中的牛奶类 重写咖啡合同中定义的方法(getCost()和GetComponents())。如果Milk类想要添加自己的方法,例如GetBrand()或GetQuantity()(请注意,客户端可能需要将其接口转换为Milk类才能访问这些方法)。虽然没有什么可以阻止您向decorator添加字段/方法,但我的问题是,除了合同中约定的内容之外,向decorator添加字段/方法是否是一种良好的做法 我想到的一个解决方案是将属性字典(任何键值对)添加到契约中,每个装饰者都可以将自己的属性添加到该字典中。稍后,客户端可以使用其密钥访问属性。问题是,对于大多数类,集合可能是空的。还有,我想Design patterns 扩展装饰器,design-patterns,decorator,Design Patterns,Decorator,我指的是维基百科上关于装饰模式的文章,我发现它非常有用。我在大多数decorator模式示例(包括上面的示例)中发现,decorator不添加自己的属性/方法,只修改合同中定义的属性/方法。例如,咖啡制作示例中的牛奶类 重写咖啡合同中定义的方法(getCost()和GetComponents())。如果Milk类想要添加自己的方法,例如GetBrand()或GetQuantity()(请注意,客户端可能需要将其接口转换为Milk类才能访问这些方法)。虽然没有什么可以阻止您向decorator添加
milk.GetBrand()
它的可读性比
milk.Properties.PropertybyName[cs_cost].
请分享你对这个问题的看法
谢谢大家,
普拉迪普
装饰者模式的意图:将额外的责任附加到
动态地创建对象。装饰师提供了一个灵活的替代方案
用于扩展功能的子类化
因此,装饰者或未装饰目标的客户需要通过同一个合同看到他们两个。因此,当您使用“decorator模式”时,向decorator添加更多方法并不会带来任何好处
然而,术语“decorator”也在非常一般的意义上使用(不是指decorator模式)。因此,您经常听到有人谈论一个装饰器,该装饰器向类添加属性/方法来装饰目标。但是,这不是装饰器模式。装饰器模式的“解决方案”可能是非常特定于语言的,因为不同的语言使实现此模式变得容易或困难。你在寻找一种特定语言的解决方案吗?不是真的……不过我用的是C。。