委托模式

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:45:00
委托模式

维基百科,自由的百科全书

跳转到: 导航, 搜索

委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。

[编辑] 简单的Java例子

在这个例子里,类C拥有一个类A的属性,类C拥有的方法f()和g()各自将处理转交给类A的f()和g()。

  class A {void f() { System.out.println("A: doing f()"); }void g() { System.out.println("A: doing g()"); }}class C {// delegationA a = new A();void f() { a.f(); }void g() { a.g(); }// normal attributesX x = new X();void y() { /* do stuff */ }}void main() {C c = new C();c.f();c.g();}

[编辑] 复杂的Java例子

通过使用接口,委托可以做到类型安全并且更加灵活。在这个例子里,类C可以委托类A或类B,类C拥有方法使自己可以在类A或类B间选择。因为类A或类B必须实现接口I规定的方法,所以在这里委托是类型安全的。这个例子显示出委托的缺点是需要更多的代码。

  interface I {void f();void g();}class A implements I {void f() { System.out.println("A: doing f()"); }void g() { System.out.println("A: doing g()"); }}class B implements I {void f() { System.out.println("B: doing f()"); }void g() { System.out.println("B: doing g()"); }}class C implements I {// delegationI i = new A();void f() { i.f(); }void g() { i.g(); }// normal attributesvoid toA() { i = new A(); }void toB() { i = new B(); }}void main() {C c = new C();c.f();c.g();}