装饰器模式和委托模式之间的区别

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

  • 装饰图案
  • 委托模式

您能否指向使用这些模式的OS源代码(在OS项目中)(尤其是委托,因为在Java

IO类中使用了装饰)。我正在寻找一些实际用法,而不仅仅是虚拟示例。也许这些模式是相同的,只是标题不同。随时写这个意见。

回答:

装饰器使用委派,但使用一种非常特定的方式。

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

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不与ClassA或ClassB共享任何类型或接口,并且知道a和b的确切类型。

装饰器是一种动态方式,可以在运行时使用委派将行为添加到逻辑实体。在Decorator中,所有实体共享一个公共接口,并使用委托来连接其工作。

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不知道它包装的项目的确切类型,并与其共享一个公共接口。

以上是 装饰器模式和委托模式之间的区别 的全部内容, 来源链接: utcz.com/qa/421062.html

回到顶部