wangchao.net.cn
注册 | 登录 | 订阅该频道 | 在线投稿
转播到腾讯微博 
 
母婴 | 数码 | 汽车 | 珠宝 | 家电 | 美食 | 景区 | 养生 | 手机 | 购车 | 首饰 | 美妆 | 装修 | 厨房 | 科普 | 动物 | 植物 |  | 百态 | 编程 | 商品 | 财经 | 信息 | 军事
  
 
当前位置: 王朝网络 >> other >> delegation模式
 

delegation模式

字体: ||
  2004-10-28撰写
  读Globus Toolkit编程文档时,里面在实现operation provider时提到了delegation模式。
  GOF的设计模式里好像没有这个模式,还好网上找到了相关的文档。翻译如下:
  委托模式:(应该翻译成委托吧,如果翻译成代理容易和proxy模式混淆)
  委托模式是一种技术,一个对象在外界来看好像实现了一些行为,但实际上是委托给相关的其他类来实现行为的.在不可以使用继承,而采用聚合时,必须使用这种技术.
  一个简单的java例子:
  这个例子中,C拥有调用A中f()和g()的插口.看起来C好像有A的功能.
  class A {
   void f() { system.out.println("A: doing f()"; }
   void g() { system.out.println("A: doing g()"; }
  }
  class C {
   // delegation
   A a = new A();
   void f() { a.f(); }
   void g() { a.g(); }
   // normal attributes
   X 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都必须通过实现接口以实现功能,这就提高了了类型安全性.作为折中,当然也需要写更多的代码.
  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 {
   // delegation
   I i = new A();
   void f() { i.f(); }
   void g() { i.g(); }
   // normal attributes
   void toA() { i = new A(); }
   void toB() { i = new B(); }
  }
  void main() {
   C c = new C();
   c.f();
   c.g();
  }
  缺点:这个模式是典型的牺牲性能提高抽象程序的清晰程度. (或者说提高代码可读性)(王朝网络 wangchao.net.cn)
 
转播到腾讯微博  
 
 
 
 
 
2004-10-28撰写 读Globus Toolkit编程文档时,里面在实现operation provider时提到了delegation模式。 GOF的设计模式里好像没有这个模式,还好网上找到了相关的文档。翻译如下: 委托模式:(应该翻译成委托吧,如果翻译成代理容易和proxy模式混淆) 委托模式是一种技术,一个对象在外界来看好像实现了一些行为,但实际上是委托给相关的其他类来实现行为的.在不可以使用继承,而采用聚合时,必须使用这种技术. 一个简单的java例子: 这个例子中,C拥有调用A中f()和g()的插口.看起来C好像有A的功能. class A { void f() { system.out.println("A: doing f()"; } void g() { system.out.println("A: doing g()"; } } class C { // delegation A a = new A(); void f() { a.f(); } void g() { a.g(); } // normal attributes X 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都必须通过实现接口以实现功能,这就提高了了类型安全性.作为折中,当然也需要写更多的代码. 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 { // delegation I i = new A(); void f() { i.f(); } void g() { i.g(); } // normal attributes void toA() { i = new A(); } void toB() { i = new B(); } } void main() { C c = new C(); c.f(); c.g(); } 缺点:这个模式是典型的牺牲性能提高抽象程序的清晰程度. (或者说提高代码可读性)
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
网友评论 查看所有评论
 

 
2006-01-09 15:01:23 繁體版 编辑
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 最新文章
 ·利用i560拨号连接到interne ·Illustrator教程:如何用网 ·Illustrator渐变网格初学实 ·Illustrator cs教程:打
 ·Illustrator教程:教你绘制 ·Illustrator教程:如何用网 ·Illustrator渐变网格初学实 ·Illustrator教程:渐变网格
 ·Illustrator cs教程:打 ·Illustrator教程:教你绘制 ·免费图片工具Picasa使用技巧挖掘 ·在Word 2007文档中插入剪贴画
 ·Web应用优化技巧 ·curl函数的中文档案 ·PEAR教程(二)--Pear的Ca ·PEAR教程(一)--Pear的介绍
 ·PEAR应用之AUTH_HTTP ·PEAR:常用模块 ·直接读取数据库信息的三种方法 ·实现文件上传的程序源码
 ·Karrigell 入门 ·再论夏新E70无故自动断电关机现象 ·A1600变及时小手电——合盖“一键 ·解决hw6515 每2天4小时更新星
 
王朝女性
 
王朝分站
 
王朝编程
 
王朝商品
 
王朝其他
 
 
 
© 2005- 王朝网络 版权所有