访问者模式
访问者模式算是设计模式中比较复杂的设计模式了,当初看的时候也是一脸懵逼,后来在java编程思想中看到了用访问者模式来处理注解后,才对其有了一定的了解,那我就和你们叨叨访问者模式。
官方定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
啥啥啥,这到底都说的啥。
其实某种数据结构说的就是被访问者,也就是图中的Element,每种数据结构对应不同的Element实现。所谓的新的操作,就是添加一种新的Visitor实现类,来访问不同的Element。
Java编程思想中用访问者模式来处理一个类中的注解,对于字段上的注解和方法上的注解(算是两种不同的数据结构)的处理,Vistitor都有不同的处理方式。当注解处理方式需要变化时,不需要修改原来的类,只需要增加一个新的Visitor实现类就行了,然后委托这个新的Visitor处理就行了。
总体来说,访问者模式的可扩展性只局限于访问者类的扩展,当增加新的数据结构时,几乎所有的Visitor都需要修改。这个模式适合被访问者的模式比较固定,比如上文说的类上面的注解处理,类的结构时固定的,能够添加注解的地方也是固定的(也就是其typeDeclaration类型就那几种),而且Vistor中与具体的Element有严重的耦合,在这个模式中也看不到SOLID原则,所以在使用访问者模式时,要充分理解业务逻辑,否则,修改起来让你崩溃。