它是装饰模式吗?

时间:2014-04-28 12:51:45

标签: java design-patterns decorator software-design

我读过这篇文章,但是我需要从这篇文章中获得关于Employ示例的专家意见:

Decorator Pattern by Examples

enter image description here

  

我们可以用数据成员装饰类吗?

请同时分享您对这最后问题的反馈意见。

3 个答案:

答案 0 :(得分:3)

每当您实现和聚合接口时,使用聚合对象提供部分实现的功能,您将拥有一个装饰器模式。您链接的帖子与该描述匹配,因此它是装饰器模式。

From Head First, Design Patterns

装饰器模式动态地为对象附加其他职责。装饰器为子类化提供了灵活的替代方法,以扩展功能

注意:此定义与您在GoF书中找到的定义完全相同:设计模式:可重复使用的面向对象软件的元素和你找到你发布的链接。

使用EmployeeDecorator子类,您正在向Employee添加服务,这是"中间" class(EmployeeDecorator)一种将委托封装在父类中的方法,因此TeamMemberTeamLead这些具体的子句不会复制委托代码。

答案 1 :(得分:0)

Decorator模式的通常目的是用另一个实现包装装饰对象的各个方法的实现。

装饰和未修饰的对象通常通过它们的公共接口引用,因此使用它们的代码不需要知道对象是否包装在装饰器中以及何时包装哪个装饰器( s)它使用。因此,Decorator向对象添加新的公共方法是不常见的,这些公共方法不会覆盖公共接口定义的任何方法。

答案 2 :(得分:0)

Decorator是一种行为模式,即它处理由其接口定义的类方法,而最后一个不定义任何成员,该模式与它们无关。

根据你的问题:

  

我们也可以用数据成员装饰类吗?

是的,我们可以在有或没有成员的情况下装饰一个类。

但是,如果您计划使用装饰作为继承的替代品,并且因此计划访问装饰类的成员(在您的示例中为EmployeeImpl),那对您来说,作为装饰器实际上是不可行的装饰接口而不是它的实现类。