文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4 转发和委托
如果一个对象不知道如何处理某条消息,总是可以通过发送消息的方式将其转发给另一个对象。在我们的简单对象系统中,可以这么做:
(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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论