如何回答“为什么要用委托,而不用方法”?
因为函数的父节点是CLR运行时或者JVM运行时,函数的标识是它们的父节点定义的。面向对象中的方法是绑定在类型系统上的函数。类型系统是什么?类型系统就是有组织有纪律有偏移地一层一层的进行分类,组织结构是棵树,每一节点都不交叉,任何两节点的通信必定经过了它们共同的父节点。
方法被绑定在了类型系统上了,于是就不能方便的传来传去了,但是现在我们想要将方法传来传去,于是委托就出场了。
类型约束了方法的上下文,面向对象中的类型就如同函数式中的函数的作用域链或闭包(它也是组织结构)。面向对象和函数式没有本质差别。
面向对象这套方法的适用范围可能更大,因为面向对象的方法论比较有形,有形的东西比较利于管理,比较利于构建出庞大的系统,而函数式中的作用域链和闭包的形比较若,不利于管理,但在人脑+工具可以管理的范围内是可以发挥它的组合优势的。
委托、递归、重定向的定义我是从《元素模式》上学到的:
什么是委托?
委托是这样定义的:两个若相似性的对象,一个对象完成某件事情的时候调用了另一个对象叫委托。(“无相似性”的对象跟“同一类型”的对象是两个极端)
两个相似的对象,一个对象干一件事情的时候将这件事情委托给了另一个对象叫重定向。
同一个对象,这个对象在干一件事情的时候调用自身的同一个方法叫递归。