我们知道两个对象的关键关系是一个对象方法调用另一个对象方法的依赖关系,在这个关系中涉及四个部分:两个对象以及有调用依赖的两个方法,他们共同构成了元素模式的一个非常重要的概念——设计空间。我们这次所接触的几种EDP就产生自这个空间内。
在一个类型实例方法调用另外一个类型实例的方法过程中,我们可以简单的总结如下内容。
1. 对象之间的相似度
2. 对象的类型之间的相似度
3. 发起调用的方法和被调用的方法之间的相似度。
如果将这几个相似度看成象限,那么我们就可以得到一个三维空间,便于后续讨论,我们探讨有对象相似度和方法相似度形成的空间——平凡设计空间。
如上表所示,当对象相似且方法不相似,即对象和方法都不是同一个,但却发生着调用依赖关系,这就是委托。委托其实是将自己的部分工作给另一个对象的另一个方法,乍一看上去委托的功能和自己要做的事情不相同,但确实自己要做事情的一部分。与此对应的是另一种EDP——重定向。
当对象不相似但方法却相似,一个对象的方法实现的功能让另一个相似的方法去实现,这就是重定向。与委托想成对比度的是委托是让调用的方法实现部分功能,而重定向则让调用的方法实现自己的几乎全部工作。
当相似(相同)的对象调用相似(相同)的方法时,这就是我们常用的递归。
当相似(相同)的对象调用不相似的方法时,其实是在一个对象中实现了一个功能,只不过这个方法功能被划分成了多个分散在这个对象汇总的模块,它们被归拢在发起调用的方法内。这即是集聚。
这四个基本的EDP是在平凡设计空间下描述出来的,这样的设计空间使得元素模式非常易于理解,不必要硬记忆,后续一些EDP也是单一关系的体现,日后使用仅需找到对应图标一目了然。