gpt4 book ai didi

java - 装饰器模式和委托(delegate)模式的区别

转载 作者:IT老高 更新时间:2023-10-28 20:59:01 30 4
gpt4 key购买 nike

装饰者模式和委托(delegate)模式(如果有的话)有什么区别?我不想只了解实现细节,还想了解用例差异以及如何使用它们的主观观点。

EDIT : Can you point to source code (in OS project) where these pattern (especially Delegation, because Decoration is used in Java IO classes) are used. I'm looking for some real usage not just dummy example. Maybe these patterns are the same differs only in title. Feel free to write this opinion.

最佳答案

装饰器使用委托(delegate),但以一种非常具体的方式。

委托(delegate)(或组合)不像是一种通过协调使用其他几个对象来构建复杂行为的一般方式那样的模式。它通常以固定或静态的方式使用。 “设置或静态”我的意思是这样的:

class Delegator {
private final ClassA a = new ClassA();
private final ClassB b = new ClassB();

public void doWork() {
a.setup();
final ResFromA resa = a.getRes();
b.setup();
b.consume(resa);
}

}

请注意,Delegator 不与 ClassAClassB 共享任何类型或接口(interface),并且知道 ab.

装饰器是一种在运行时使用委托(delegate)向逻辑实体添加行为的动态方式。在 Decorator 中,所有实体共享一个公共(public)接口(interface),并使用委托(delegate)来连接它们的工作。

public interface Item {
public void drawAt(final int x, final int y);
}

public class CircleAround implements Item {
private final Item wrapped;
private final int radius;

public CircleAround(public final Item wrapped, public final int radius) {
this.wrapped = wrapped;
this.radius = radius;
}

public void drawAt(final int x, final int y) {
// First handle whatever we are wrapping
wrapped.drawAt(x,y);
// Then add our circle
Graphics.drawCircle(x, y, radius);
}

}

请注意,与第一个示例不同,CircleAround 不知道它所包装的项目的确切类型,并与其共享一个公共(public)接口(interface)。

关于java - 装饰器模式和委托(delegate)模式的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389544/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com