软件构造总结4-委派

  之前做实验二的时候,对于最后的Friendship里调用Graph里的ADT的委派的方式不是很熟悉,之后学完才把它弄明白,所以在这里对委派进行一下总结,再对实验二里的将Friendship里图的各种功能委派给Graph的过程说明,这样的话对于CRP原则理解的更加深入,并且更好地理解了委派相比于继承的好处。

  委派模式(Delegate Pattern)又叫委托模式。它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来。可以看做是一种特殊情况下的静态代理的全权代理。委派可以建立临时性的委派关系,把执行功能的ADT作为原ADT方法的参数,也可以进行动态绑定,把执行功能的ADT作为原ADT的一个field,在方法中利用这个成员字段实现功能。根据CRP原则,我们知道利用委派来实现复用性比继承实现复用性要好,所以我们应该尽可能地把继承换成委派。当然,如果主ADT要调用功能ADT中的几个方法时,我们把它们的关系理解成是“has a”,而不是“is a”,这时使用委派是非常合理的,从这里就能体会出委派相对于继承的优势。只使用继承的编程模式,如果一个类继承了另一个类,为了满足LSP原则,就必须满足那个类的RI和各种方法的spec,在完成整体代码后,如果想对某个方法的功能进行修改,往往需要修改已有的代码或建立新的子类,较为繁琐且易违反OCP的原则,而引入委派后,便可以将那些具有个性的方法委派给外部类进行完成,在自己类中只是使用那些类中的某些方法,这样便能较好的面对变化,也能增加代码的可拓展性。

  委派在设计模式里大量的被使用,比如说典型的策略模式,就是利用建立一套能扩展不同算法实现的ADT,然后在主ADT里的这个功能委派给这套ADT,在比如说Vistor模式,提前预留好一个能扩展功能的接口,方法就是在ADT中写一个accept方法,然后把功能委派给Vistor,需要功能扩展时,在Vistor中实现即可,这样使代码的扩展性更好,并且没有修改已经写好的代码,符合OCP的原则,从这些模式中我们就能体会到委派的魅力。

  在实验二中,当时我们首先设计了一个表示图的ADT,利用这个ADT来实现了应用poet和FriendshipGraph,这两个类和Graph<L>之间就是动态委派的关系,在这两个应用里,都是先在字段中进行动态绑定,然后实现委派,把在图当中的各种操作委派给这个字段,Graph里没有的功能在单独实现,这样就提高了代码的复用度。

  这样实验二中的委派关系我们就理解清楚了,并且也感受到了委派所带来的好处,希望这篇博客能使你对委派有更深刻的理解。

posted on 2022-06-14 13:52  renjie_master  阅读(68)  评论(0)    收藏  举报

导航