返回介绍

4 转发和委托

发布于 2025-02-20 00:17:07 字数 1046 浏览 0 评论 0 收藏 0

如果一个对象不知道如何处理某条消息,总是可以通过发送消息的方式将其转发给另一个对象。在我们的简单对象系统中,可以这么做:

(define seller
 (OBJECT ()
  ([method price (prod)
           (* (case prod
                ((1) (-> self price1))
                ((2) (-> self price2)))
              (-> self unit))]
   [method price1 () 100]
   [method price2 () 200]
   [method unit () 1])))

(define broker
 (OBJECT
  ([field provider seller])
  ([method price (prod) (-> provider price prod)])))

> (-> broker price 2)
200

对象 broker (中间商) 不知道如何计算产品( prod ,product) 的价格(price),但它可以声称自己能提供价格信息,而其做法就是实现一个方法处理 price 消息,然后是简单地将消息转发给 seller (卖方),由 seller 实现所需的行为。请注意, broker 在其 provider (供应商) 字段中保有对 seller 的引用。这是典型的对象组合的例子,通过消息转发实现。

现在我们可以看到这种方法的问题了:消息的转发必须显式给出,对于每种我们预计可能发送给 broker 的消息,都必须定义一个负责转发到 seller 的方法。例如:

> (-> broker unit)
message not understood: unit

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文