File tree 1 file changed +5
-5
lines changed
1 file changed +5
-5
lines changed Original file line number Diff line number Diff line change 1
1
============================
2
- 8.21 实现观察者模式
2
+ 8.21 实现访问者模式
3
3
============================
4
4
5
5
----------
60
60
t4 = Add(Number(1 ), t3)
61
61
62
62
这样做的问题是对于每个表达式,每次都要重新定义一遍,有没有一种更通用的方式让它支持所有的数字和操作符呢。
63
- 这里我们使用观察者模式可以达到这样的目的 :
63
+ 这里我们使用访问者模式可以达到这样的目的 :
64
64
65
65
.. code-block :: python
66
66
159
159
讨论
160
160
----------
161
161
刚开始的时候你可能会写大量的if/else语句来实现,
162
- 这里观察者模式的好处就是通过 ``getattr() `` 来获取相应的方法,并利用递归来遍历所有的节点:
162
+ 这里访问者模式的好处就是通过 ``getattr() `` 来获取相应的方法,并利用递归来遍历所有的节点:
163
163
164
164
.. code-block :: python
165
165
184
184
def do_HEAD (self , request ):
185
185
pass
186
186
187
- 观察者模式一个缺点就是它严重依赖递归 ,如果数据结构嵌套层次太深可能会有问题,
187
+ 访问者模式一个缺点就是它严重依赖递归 ,如果数据结构嵌套层次太深可能会有问题,
188
188
有时候会超过Python的递归深度限制(参考 ``sys.getrecursionlimit() `` )。
189
189
190
190
可以参照8.22小节,利用生成器或迭代器来实现非递归遍历算法。
191
191
192
- 在跟解析和编译相关的编程中使用观察者模式是非常常见的 。
192
+ 在跟解析和编译相关的编程中使用访问者模式是非常常见的 。
193
193
Python本身的 ``ast `` 模块值的关注下,可以去看看源码。
194
194
9.24小节演示了一个利用 ``ast `` 模块来处理Python源代码的例子。
195
195
You can’t perform that action at this time.
0 commit comments