委派算是java程序设计中的一个非常重要的模式了,其核心思想便是将一些共性的操作交付给一个专门的类去完成 ,这样随之而来的便是更多的类与更加复杂的整体项目结构,但所得到的好处便是省去了许多没有意义的重复代码,增强了整体代码的复用性。
只使用继承的编程模式,如果一个类继承了另一个类,为了满足LSP原则,就必须满足那个类的RI和各种方法的spec,在完成整体代码后,如果想对某个方法的功能进行修改,往往需要修改已有的代码或建立新的子类,较为繁琐且易违反OCP的原则,而引入委派后,便可以将那些具有个性的方法委派给外部类进行完成,在自己类中只是使用那些类中的某些方法,这样便能较好的面对变化,也能增加代码的可拓展性。
而基于委派这种模式,自然也衍生了许多设计模式,个人认为其中最为典型的便是Vistor。Vistor的设计目的便是提高ADT的可拓展性,只需在类中设置一个accept方法,便能接收各种复杂的拓展,而这些拓展的功能代码并不需要写在自己ADT中,只是将其委派给外部的vistor,然后将自己作为参数传递给该vistor,很好的体现了OCP的原则,不需要对自己代码做修改。