基于维基百科Delegation Pattern的示例,提供了以下示例代码。 但我也有我的代码版本,只是稍有改动。我想知道哪个代码更好/(更灵活)以及为什么?
提前谢谢。
维基百科代码
interface I {
void f();
void g();
}
class A implements I {
public void f() { System.out.println("A: doing f()"); }
public void g() { System.out.println("A: doing g()"); }
}
class B implements I {
public void f() { System.out.println("B: doing f()"); }
public void g() { System.out.println("B: doing g()"); }
}
class C implements I {
I i = null;
// delegation
public C(I i){ this.i = i; }
public void f() { i.f(); }
public void g() { i.g(); }
// normal attributes
public void to(I i) { this.i = i; }
}
public class Main {
public static void main(String[] args) {
C c = new C(new A());
c.f(); // output: A: doing f()
c.g(); // output: A: doing g()
c.to(new B());
c.f(); // output: B: doing f()
c.g(); // output: B: doing g()
}
}
我的代码(所有课程都相同)
public class Main {
public static void main(String[] args) {
//C c = new C(new A());
I ii = new A();
ii.f(); // output: A: doing f()
ii.g(); // output: A: doing g()
//c.to(new B());
ii = new B();
ii.f(); // output: B: doing f()
ii.g(); // output: B: doing g()
}
}
答案 0 :(得分:1)
您的代码根本没有使用委托模式,您只需直接调用实现类的方法。