上述设计方案必定是令人满足的。系统内新范例的插手涉及添加或修改差异的类,但没有须要在系统内对代码作大范畴的窜改。除此以外,RTTI并不象它在RecycleA.java里那样被不内地利用。然而,我们仍然有大概更深入一步,以最“纯”的角度来对待RTTI,思量如安在垃圾分类系统中将它完全没落。
为到达这个方针,首先必需认识到:对所有与差异范例有非凡关联的勾当来说——好比侦测一种垃圾的详细范例,并把它置入适当的垃圾筒里——这些勾当都该当通过多形性以及动态绑定加以节制。
以前的例子都是先按范例排序,再对属于某种非凡范例的一系列元素举办操纵。此刻一旦需要操纵特定的范例,就请先停下来想一想。事实上,多形性(动态绑定的要领挪用)整个的宗旨就是帮我们打点与差异范例有非凡关联的信息。既然如此,为什么还要本身去查抄范例呢?
谜底在于各人或者不觉得然的一个原理:Java只执行单一调派。也就是说,如果对多个范例未知的工具执行某项操纵,Java只会为那些范例中的一种挪用动态绑定机制。这虽然不能办理问题,所以最后不得不人工判定某些范例,才气有效地发生本身的动态绑定行为。
为办理这个缺陷,我们需要用到“多重调派”机制,这意味着需要成立一个设置,使单一要领挪用能发生多个动态要领挪用,从而在一次处理惩罚进程中正确判定出多种范例。为到达这个要求,需要对多个范例布局举办操纵:每一次调派都需要一个范例布局。下面的例子将对两个布局举办操纵:现有的Trash系列以及由垃圾筒(Trash Bin)的范例组成的一个系列——差异的垃圾或废品将置入这些筒内。第二个分级布局并非绝对显然的。在这种环境下,我们需要工钱地建设它,以执行多重调派(由于本例只涉及两次调派,所以称为“双重调派”)。