首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中具有装饰器特定方法的装饰器模式

Java中具有装饰器特定方法的装饰器模式
EN

Stack Overflow用户
提问于 2011-12-27 21:17:03
回答 3查看 1.3K关注 0票数 6

使用维基百科( http://en.wikipedia.org/wiki/Decorator_pattern)上展示的咖啡装饰器示例,某人如何能够拥有只有装饰器才有的方法,例如,牛奶装饰器可以有一个名为"fatContent“的方法。对于这种设计模式,这是可能的吗?如果不是,我可以使用哪种模式来完成此任务?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-27 21:26:46

根据定义,装饰器模式不允许添加接口中定义的方法以外的方法。实际上,您总是可以向任何类添加方法,但是一旦这些方法没有在实现接口中定义,客户端就不能使用此接口调用它们。

您的问题的简单解决方案是定义几个接口,例如Coffee和Milk。然后,您可以定义实现这两个接口的类Capuchino,并且可能包含两个实例:SimpleCofeeFoamedMilk。但是这个解决方案看起来更像是Decorator和Facade的组合。

票数 3
EN

Stack Overflow用户

发布于 2011-12-27 21:25:26

你可以,但你需要知道类型以便实际调用该方法(假设没有反射等)。如果它与您传递的类型不匹配。

类型确定编译时已知的内容:如果CoffeeDecorater不包含fatContent签名,则接收到CoffeeDecoractor的任何内容都不会知道该方法的存在。

您可以创建一个额外的接口,但是您需要知道它是否存在以便您可以检查它(instanceof),或者询问类以检查特定的签名(反射)。

Java要么在编译时知道某个方法存在,要么在运行时检查它。

票数 9
EN

Stack Overflow用户

发布于 2011-12-27 21:24:27

装饰器可以有任意数量的特定方法。您可以引入装饰器特定的接口,该接口是装饰器除了实现装饰的接口之外还要实现的。

但是,必须有人知道这些方法的存在,因此要么装饰器必须在内部调用该方法,调用者必须知道它使用装饰器而不是装饰器对象(您可以使用instanceof进行测试),或者使用反射来检查这些方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8645089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档