目录
1.设计样式
strategy模式和visitor模式拥有共同的设计样式(使用委派的思路):
两者的设计思路都是因为未来对现有的ADT可能有不同的设计需求,为了满足OCP原则,通过委派的方式为现有的ADT留下扩展的空间。
2.对具体的设计模式进行简述
下面对这两者设计模式进行
Strategy模式:
这里给出的是对于支付问题,针对用什么支付给出多个策略,交给客户端调用。
Visitor设计模式:
这里描述的是通过在ItemElement中预留accept方法去接受visitor以实现对该ADT功能的扩展。
3.两者的对比
我们可以看到visitor和strategy有着相同的共性样式,同时都是对于ADT的扩展,在代码的表现上似乎区别也不是很大,但二者的应用逻辑有很大的区别。
从目的上看,Visitor是用于对ADT本身方法的扩展,Strategy是为了实现对ADT内部实现的算法的灵活替换。
从出发角度来看,Visitor设计模式是站在外部client的角度,去增加对于ADT的不同操作。strategy设计模式是站在内部ADT的角度,变化对其内部功能的不同配置。
从与ADT的关系来看,Visitor与ADT本身关系不大,类似将ADT作为参数在一个外部进行使用,Strategy方法则是ADT的重要组成部分,是在ADT方法的内部进行运行。
形象上来说:将ADT比作一个人的话,strategy设计模式就好比这个人已经会武功,使用不同的strategy就好比给这个人不同的武器去进行使用;Visitor设计模式就好比让这个人多学会了东西,比如给他增加了读书的功能这样。一个是对功能微调的开放,一个是功能增加的开放。