Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是装饰图案吗?_Java_Design Patterns_Decorator_Software Design - Fatal编程技术网

Java 这是装饰图案吗?

Java 这是装饰图案吗?,java,design-patterns,decorator,software-design,Java,Design Patterns,Decorator,Software Design,我读了这篇文章,但我需要从这篇文章中得到一个关于雇佣示例的专家意见: 我们也可以用数据成员装饰类吗 还请分享您对最后一个问题的反馈。每当您实现并聚合一个接口,使用聚合对象提供部分实现的功能时,您将拥有一个装饰器模式。您链接的帖子与该描述相匹配,因此它是一种装饰模式 : Decorator模式动态地向对象附加额外的职责。装饰器为扩展功能提供了一种灵活的子类化替代方法 注意:此定义与您在GoF书籍《设计模式:可重用面向对象软件的元素》中找到的定义完全相同,与您在发布的链接中找到的定义相同 通过您

我读了这篇文章,但我需要从这篇文章中得到一个关于雇佣示例的专家意见:

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


还请分享您对最后一个问题的反馈。

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

:

Decorator模式动态地向对象附加额外的职责。装饰器为扩展功能提供了一种灵活的子类化替代方法

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


通过您的
EmployeeDecorator
子类,您正在向
Employee
添加服务,这是一个“中间”类(
EmployeeDecorator
)将委托封装在父类中的一种方法,这样具体的子类,如
TeamMember
TeamLead
就不会复制委托代码。

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


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

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

根据你的问题:

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

是的,我们可以装饰一个班级,有成员也可以没有成员


但是,如果您计划使用装饰作为继承的替代,并因此计划访问装饰类的成员(在您的示例EmployeeImpl中),这将不适用于您,因为装饰器实际上装饰接口而不是其实现类。

如果链接断开,则您的post无效。发布您的有问题的代码。谢谢,下次将继续关注。