定义:
允许操作应用到一组对象上,解耦操作和对象本身。
应用场景:
操作经常增加,对象本身稳定。
特点:
利用了重载,是在编译期间,由参数的声明类型决定的,而非运行时,根据参数的实际类型决定的。
优点:
增加新的操作,可以不要修改对象。非常方便。
Single patch和double patch:
Single 执行哪个对象的方法,根据运行时对象类型确定;执行对象的哪个方法,根据编译时的入参类型确定;
Double 执行对象的哪个方法,根据运行时入参类型确定。
c++和java都是single
建议:
不用,难理解,难实现;重点是看到能认出来;
可以用工厂模式来替代;
(对于资源文件处理工具这个例子,如果工具提供的功能并不是非常多,只有几个而已,那我更推荐使用工厂模式的实现方式,毕竟代码更加清晰、易懂。相反,如果工具提供非常多的功能,比如有十几个,那我更推荐使用访问者模式,因为访问者模式需要定义的类要比工厂模式的实现方式少很多,类太多也会影响到代码的可维护性。)