1.    委派/委托:一个对象请求另一个对象的功能 

委派是复用的一种常见形式

一个简单例子:

正如一下所示:

Receiver 对象将操作委派给Delegate对象执行。

Client调用Receiver,而不使用Delegate对象

2.    利用委派可以扩展功能:

例如:我们要建立一个LoggingList,功能与list相同,但能记录其add/remove的操作。

我们可以使用委派:

3.    委派 vs. 继承

继承:extending一个基类,通过增加一个新操作或重写一个操作。

委派:采取一个操作,并将其传递给另一个类。

例如stack继承list并不合适,而应该使用委托的方式实现其push,pop等方法。

当使用继承,子类期望使用父类的方法时:

可能出现的一个问题:例如运行以下代码

public class test {public static void main(String[] args) {B b = new B();b.foo();}
}
class A { void foo() { this.bar(); }void bar() { System.out.println("A.bar"); }
}
class B extends A { public B() {}void foo() { super.foo(); }void bar() { System.out.println("B.bar"); }
}

本意为b调用a的方法,但由于b对a中方法涉及到的其他方法进行了重写,而达不到预期的效果。

其结果为:

而使用委托就能很好地避免这一问题。

如果子类只需要复用父类中的一小部分方法 ,

可以不需要使用继承,而是通过委派机制来实现。

如:

委托可以视为在对象层次上的复用,而继承可视为在类层次上的复用。

3.    委派的种类

1.     Use(A use B)

2.    Composition/aggregation(A owns B)

3.    Association(A has B)

分别加以解释:

(1)Dependency:临时性的delegation

即上面所说的uses-a

只是一个临时关系,一个对象需要其他对象来实现自己。

如:

(2) Association: 永久性的delegation

即上面所说的has_a关系。

(3)Composition: 更强的delegation

delegate对象已经是receiver的一部分, 为is_part_of关系。若receiver不存在,相

应的delegate对象也不复存在。例如:

正如心脏和人的关系一样。

(4)Aggregation: 聚合。 delegate对象在receiver之外被创建,被当做参数传递给

receiver。

注:Composition vs. Aggregation

In composition, when the owning object is destroyed, so are the contained objects.

In aggregation, this is not necessarily true.

复用形式之:委派(delegation)相关推荐

  1. windows中关于委派(delegation)的理解

    CATALOG 1.前言 2.什么是委派 2.1 前置知识 2.1.1 S4U2SELF 2.1.1.1 用途 2.1.1.2 细节 2.1.1.3 延伸 2.1.2 S4U2PROXY 2.1.2. ...

  2. Hadoop授权令牌解释(原标题 Hadoop Delegation Tokens Explained)

    转载:https://blog.cloudera.com/hadoop-delegation-tokens-explained/ 很好的文章,但是要翻墙转载给国内的伙伴,有问题请联系删除 第一部分谷歌 ...

  3. 基于windows中委派的攻击思路(上)-约束性委派与非约束性委派

    文章目录 1. 前言 2. 发现具有委派关系的用户和计算机 2.1 原理 2.2 利用工具查找 1. ADFind 1.查询非约束委派的主机: 2.查询约束委派的主机 2. ldapsearch 1. ...

  4. 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则

    我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...

  5. 网络编程 TCP电子网络词库

    电子词典: 要求: 登录注册功能,不能重复登录,重复注册.用户信息也存储在数据库中. 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用数据库保 ...

  6. iphone内存管理

    http://hi.baidu.com/spopavenvldiqyr/item/c8d620b6282c4d4abb0e122a iphone内存管理(一) BY 洋葱头 http://hi.bai ...

  7. 电子词典(基于TCP协议多进程通信和数据库)

    项目:电子词典 项目要求: 登录注册功能,不能重复登录,重复注册.用户信息也存储在数据库中. 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用 ...

  8. OOD知识---对OOA\OOD\OOP思想

            面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节.其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受.   ...

  9. STM32 USART串口DMA 接收和发送的源码详解!

    硬件平台:STM32F103ZET6: 开发环境:KEIL 4: 先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信 ...

最新文章

  1. php和python交互-浅析PHP与Python进行数据交互
  2. python dict getitem_python – 拦截dict __getitem__方法调用,当它传递给另一个字典的更新方法时...
  3. 一文看懂Python(四)-----os.path模块篇
  4. 【转载】一起聊天的wz132
  5. java中计算平均成绩_Java计算平均成绩
  6. 7、【转载】python yield generator 详解
  7. 网站成功的三十三个法则
  8. 使用com.alibaba.druid.filter.config.ConfigTools进行加密和解密工具类
  9. mysql实验四数据库查询和视图_数据库实验四答案
  10. 计算机网络中网关、路由器、网桥、交换机概念详解
  11. 寻道,思考人生的价值(观小米十周年演讲有感)
  12. 新浪微博客户端开发之授权登录+获取微博列表
  13. 小白学 Python(2):基础数据类型(上)
  14. 基于Linux、QT、C++的“别踩白块儿”小游戏
  15. 如何查看mysql的安装路径
  16. 鸣人和佐助———三维数组标记踪迹,形象理解记忆
  17. ValueError: At least one stride in the given numpy array is negative解决方案
  18. <贪心算法>学习及经典实例分析
  19. uft自动化测试工具安装步骤_2020年十大最佳自动化测试工具
  20. 大牧絮叨设计模式:建造者模式

热门文章

  1. 用Python采集球员信息,成功预测到了球赛胜负?
  2. 中移动强推五模手机 千元低端机面临成本难题
  3. JAVA专题---计算思维
  4. 涂鸦智能CBU二次开发指导手册入门版——智能灯
  5. 双线双路网络路由如何设置
  6. 简谈Apple Pay
  7. 用matlab可以完成事件调度法么,(完整版)MM1排队系统仿真matlab实验报告
  8. 区块链+教育 解决教育行业所面临的问题
  9. 黎曼猜想证明:尴尬的现场QA与悲观的各方评价
  10. Apace Mina Hello world