From 6c6bce00133051041ac516e8a8d822e413ebf7d7 Mon Sep 17 00:00:00 2001 From: slideclick Date: Mon, 20 Jul 2015 15:58:59 +0800 Subject: [PATCH] =?UTF-8?q?vistor=E6=A8=A1=E5=BC=8F=E9=80=9A=E5=B8=B8?= =?UTF-8?q?=E8=AF=91=E4=B8=BA=E8=AE=BF=E9=97=AE=E8=80=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 观察者模式指observer模式,早已成业界通用词汇。此处vistor译为观察者不妥,应为访问者 --- source/c08/p21_implementing_visitor_pattern.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/c08/p21_implementing_visitor_pattern.rst b/source/c08/p21_implementing_visitor_pattern.rst index c7ac9242..473a0aa3 100644 --- a/source/c08/p21_implementing_visitor_pattern.rst +++ b/source/c08/p21_implementing_visitor_pattern.rst @@ -1,5 +1,5 @@ ============================ -8.21 实现观察者模式 +8.21 实现访问者模式 ============================ ---------- @@ -60,7 +60,7 @@ t4 = Add(Number(1), t3) 这样做的问题是对于每个表达式,每次都要重新定义一遍,有没有一种更通用的方式让它支持所有的数字和操作符呢。 -这里我们使用观察者模式可以达到这样的目的: +这里我们使用访问者模式可以达到这样的目的: .. code-block:: python @@ -159,7 +159,7 @@ 讨论 ---------- 刚开始的时候你可能会写大量的if/else语句来实现, -这里观察者模式的好处就是通过 ``getattr()`` 来获取相应的方法,并利用递归来遍历所有的节点: +这里访问者模式的好处就是通过 ``getattr()`` 来获取相应的方法,并利用递归来遍历所有的节点: .. code-block:: python @@ -184,12 +184,12 @@ def do_HEAD(self, request): pass -观察者模式一个缺点就是它严重依赖递归,如果数据结构嵌套层次太深可能会有问题, +访问者模式一个缺点就是它严重依赖递归,如果数据结构嵌套层次太深可能会有问题, 有时候会超过Python的递归深度限制(参考 ``sys.getrecursionlimit()`` )。 可以参照8.22小节,利用生成器或迭代器来实现非递归遍历算法。 -在跟解析和编译相关的编程中使用观察者模式是非常常见的。 +在跟解析和编译相关的编程中使用访问者模式是非常常见的。 Python本身的 ``ast`` 模块值的关注下,可以去看看源码。 9.24小节演示了一个利用 ``ast`` 模块来处理Python源代码的例子。