`
Hooopo
  • 浏览: 328871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

delegation

阅读更多
目的·概要

负责进行方法的委托(delegation)。

Delegator类会委托指定的对象执行某方法. 在使用Delegator类时, 要先继承它,然后对__getobj__方法进行再定义, 以便指定接受委托的对象.

SimpleDelegator是Delegator的一个实用例子, 它委托构造函数所接收到的对象来执行某方法.

DelegateClass(supperclass)函数负责定义并返回一个委托类, 该类会委托superclass类的某个对象来执行实例方法.


Delegator
SimpleDelegator
范例代码
require 'delegate'
foo = Object::new
def foo.test
  p 25
end
foo2 = SimpleDelegator::new(foo)
foo2.test # => 25

class ExtArray<DelegateClass(Array)
  def initialize()
    super([])
  end
end
a = ExtArray::new
p a.type  # => ExtArray
a.push 25
p a       # => [25]

Delegator
该类为给出的对象提供委托用的方法定义。

在构造函数内部那些被指定对象的实例方法中,定义委托方法, 使得那些不属于自己的方法可以向返回__getobj__的对象进行委托操作.

实例方法
Delegator#initialize(obj)
定义实例方法,使得obj中不属于自己的实例方法可以向返回__getobj__的对象进行委托操作.

Delegator#__getobj__
返回接受委托的对象. 默认情况下, 它会引发NotImplementError, 所以必须在子类中进行再定义.

SimpleDelegator
该类利用Delegator类, 委托指定对象执行某方法.

上级类
Delegator

类方法
SimpleDelegator.new(obj)
生成一个对象, 它委托obj来执行自身所拥有的方法。

实例方法
SimpleDelegator#__getobj__
返回接受委托的对象。

SimpleDelegator#__setobj__(obj)
将接受委托的对象变为obj。

请注意, 因为只有在生成时才会进行委托方法的定义, 所以即使接受委托的对象和obj之间存在实例方法上的差异, 也无法再次设定委托实例方法.

函数
DelegateClass(superclass)
定义并返回一个委托类, 它委托superclass类的实例来执行某方法.

SEE ALSO
Object#method_missing(method_symbol, ...)
若对象中尚未定义某方法时, 就会调用该方法. 使用该方法, 您可以将自己不知道的方法委托给其他的对象.

例:

def hoge.method_missing(message, *arg)
    @to_obj.send(message, *arg)
end
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics