1700472131
}
1700472132
1700472133
}
1700472134
1700472135
改动非常少,就黑体那么一行的改动,运行结果如下:
1700472136
1700472137
姓名:张三 性别:男 薪水:1800 工作:编写Java程序,绝对的蓝领、苦工加搬运工
1700472138
1700472139
姓名:李四 性别:女 薪水:1900 工作:页面美工,审美素质太不流行了!
1700472140
1700472141
姓名:王五 性别:男 薪水:18750 业绩:基本上是负值,但是我会拍马屁呀
1700472142
1700472143
运行结果也完全相同,那回过头来看看这个程序是怎么实现的:
1700472144
1700472145
❑第一,通过循环遍历所有元素。
1700472146
1700472147
❑第二,每个员工对象都定义了一个访问者。
1700472148
1700472149
❑第三,员工对象把自己作为一个参数调用访问者visit方法。
1700472150
1700472151
❑第四,访问者调用自己内部的计算逻辑,计算出相应的数据和表格元素。
1700472152
1700472153
❑第五,访问者打印出报表和数据。
1700472154
1700472155
事情的经过就是这个样子。那我们再来看看上面提到的数据和报表格式都会改变的情况。首先是数据的改变,数据改了当然都要改,说不上两个方案有什么优劣;其次是报表格式的修改,这个方案绝对是有优势的,我只要再产生一个IVisitor的实现类就可以产生一个新的报表格式,而其他的类都不用修改,如果你用Spring开发,那就更好了,在Spring的配置文件中使用的是接口注入,我只要把配置文件<property name=“xxx”ref=””/>中的ref修改一下就行了,其他的都不用修改了!这就是访问者模式的优势所在。
1700472156
1700472157
1700472158
1700472159
1700472161
设计模式之禅 25.2 访问者模式的定义
1700472162
1700472163
访问者模式(Visitor Pattern)是一个相对简单的模式,其定义如下:Represent anoperation to be performed on the elements of an object structure.Visitor lets you define a new operation without changing the classes of the elements on which it operates.(封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。)
1700472164
1700472165
访问者模式的通用类图如图25-5所示。
1700472166
1700472167
1700472168
1700472169
1700472170
图25-5 访问者模式的通用类图
1700472171
1700472172
看了这个通用类图,大家可能要犯迷糊了,这里怎么有一个ObjectStruture类呢?你刚刚举的例子怎么就没有呢?真没有吗?我们不是定义了一个List了吗?它中间的元素是我们一个一个手动增加上去的,这就是一个ObjectStruture,我们来看这几个角色的职责。
1700472173
1700472174
❑Visitor——抽象访问者
1700472175
1700472176
抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的。
1700472177
1700472178
❑ConcreteVisitor——具体访问者
1700472179
1700472180
它影响访问者访问到一个类后该怎么干,要做什么事情。
[
上一页 ]
[ :1.700472131e+09 ]
[
下一页 ]