【发布时间】:2014-04-28 12:51:44
【问题描述】:
【问题讨论】:
-
如果链接断开,您的帖子无效。发布有问题的代码。
-
谢谢,下次会注意的。
标签: java design-patterns decorator software-design
【问题讨论】:
标签: java design-patterns decorator software-design
每当你实现和聚合一个接口,使用聚合对象来提供部分实现的功能,你就会有一个装饰器模式。您链接的帖子与该描述匹配,因此它是一种装饰器模式。
From Head First, Design Patterns:
装饰者模式动态地将额外的职责附加到一个对象上。装饰器为扩展功能提供了一种灵活的替代子类的方法
注意:此定义与 GoF 书中的定义完全相同:Design Patterns: Elements of Reusable Object-Oriented Software您可以在您发布的链接中找到。
使用您的 EmployeeDecorator 子类,您正在向 Employee 添加服务,这是这个“中间”类 (EmployeeDecorator) 一种在父类中封装委托的方法,因此具体的子类,例如 TeamMember 和 TeamLead不复制委托代码。
【讨论】:
装饰器模式的通常目的是用另一个实现包装被装饰对象的各个方法的实现。
装饰对象和未装饰对象通常通过它们的公共接口来引用,因此使用它们的代码不需要知道对象是否包装在装饰器中以及何时包装了哪个装饰器( s) 它使用。出于这个原因,装饰器向对象添加不覆盖公共接口定义的任何方法的新公共方法是不常见的。
【讨论】:
装饰器是一种行为模式,即它处理由其接口定义的类方法,最后一个不定义任何成员,该模式与它们无关。
根据你的问题:
我们也可以用数据成员装饰类吗?
是的,我们可以装饰一个有或没有成员的类。
但是,如果您计划使用装饰作为继承的替代,并且因此计划访问被装饰类的成员(在您的示例 EmployeeImpl 中),那么这对您不起作用,因为装饰器实际上装饰了接口而不是它的实现类。
【讨论】: