类图
代码
Element
1 | abstract class Medicine{ |
ConcreteElement
1 | class MedicineA extends Medicine{ |
Visitor
1 | abstract class Visitor{ |
ConcreteVisitor
1 | class Charger extends Visitor{ |
ObjectStructure
1 | class Presciption{ |
测试类
1 | public class Main { |
运行结果
1 | 划价员小李给药板蓝根划价:20.0 |
总结
概述
可以在不改变原有数据结构的情况下定义作用于这些元素的新的操作
优点
增加新的操作很方便,直接加一个新的访问者就可以,无需修改源代码,符合开闭原则
将元素的相关操作都封装在访问者中,更加符合单一职责原则
缺点
增加新元素很难,如果要加新元素,所有访问者都得加一遍访问访问