专业的编程技术博客社区

网站首页 > 博客文章 正文

Aha!设计模式(105)-访问者模式(1)

baijin 2024-10-01 07:33:06 博客文章 8 ℃ 0 评论

意图

将作用于某个数据结构中的各个元素的操作集合成一个操作类。这样当需要扩展对数据结构中元素的操作时只需扩展操作类而不是修改数据结构中的操作对象类本身。

动机

考虑一个使用组合模式形成的树状数据结构。使用组合模式的一个好处就是可以以透明的方式增加对于整个数据结构中每个要素的操作。实现方式非常简单,就是在组合类Composite中准备一个相同的方法,在这个方法中调用每个子要素的对应方法。

def reset_connections(self, memo):
 Component.reset_connections(self, memo)
 for child in self.iter():
 child.reset_connections(memo)


这种方式真的很好用,至少在最初使用这种方法增加功能时设计者一定是这样认为的。但是随着使用次数的增多,设计者早晚会发现:每次都是同样的结构,稍微换一下操作的内容就变成了另外一个功能。

这种重复性往好的方向看可以说是使用同样的方式解决了不同的问题,降低了增加新功能的难度,这当然没有错。但是从另一个角度来说,毕竟增加功能时修改了已有的代码。是不是可以在不修改已有代码的情况下,增加新功能呢?

同样的结构就是这个问题的突破口,而访问者模式就是这个问题的解决之策。




觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。

面向对象设计,面向对象编程,面向对象思考!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表