名称:委托

通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

问题与解决方案:

面向对象的编程提供了某些不同于传统条件语句的手段,从而创建了更多态的代码流。这个功能的实现方法之一是创建基于委托设计模式的对象。

委托设计模式致力于从核心对象中去除复杂性。此时我们并不设计极大依赖与通过评估条件语句而执行特定功能性的对象,基于委托模式的对象能够将判决委托给不同的对象。委托既可以像使用中间对象处理判决树一样简单,也可以像使用动态实例化对象提供期望的功能一样复杂。

委托设计模式的一个使用示例是为特定数据部分提供多种格式。假设在开放源代码库中存在一个归档。当访问者打算下载部分源代码时,他们可以选择两种不同格式的文件。指定文件被压缩后将被发送至浏览器。在这个示例中,我打算采用zip和tgz压缩格式的文件。

通常,我们需要创建一个文件收集和下载对象。这个对象具有收集被请求文件以及再将这些文件的引用存储在内部的方法。随后,专门用于指定压缩类型的方法会被调用。如果压缩类型为zip,那么就会调用generateZip()方法。

我们应当使用基于委托设计模式的对象来采取上述约定的函数。generateZip()方法的功能行应当被转移至针对基对象的文件列表执行该功能的Delegate类。这不仅可以减少基对象的复杂性,而且也可以为代码提供更好的可维护性。如果要采用新的压缩类型(如.dmg),那么只需创建新的Delegate对象。稳定的基对象并不需要被编辑。

当一个对象包含复杂但独立的、必须基于判断执行的功能性的若干部分时,最佳的做法是使用基于委托设计模式的对象。

UML:

Delegate

代码示例: