委托(或组合)与其说是一种通过协调使用其他几个对象来构建复杂行为的一般方式,不如说是一种模式。它通常以固定或静态方式使用。“固定或静态”的意思是这样的:
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不知道它包装的项目的确切类型,并与其共享一个公共接口。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)