Ruby代理例子

require 'delegate'

class Assistant
 def initialize(name)
  @name = name
 end

 def read_email
  puts "(#{@name}) It's mostly spam."
 end

 def check_schedule
  puts "(#{@name}) You have a meeting today."
 end
end

class Manager < DelegateClass(Assistant)
 def initizlize(assistant)
  super(assistant)
 end

 def attend_meeting
  puts "please hold my calls"
 end
end

frank = Assistant.new("Frank")
anne=Manager.new(frank)
anne.attend_meeting   #=> please hold my calls
anne.read_email      #=>(Frank) It's mostly spam.
anne.check_schedule   #=>(Frank) You have a meeting today.

=begin
DelegateClass()是一种拟态方法,这种方法创建并返回一个新的Class..这个类会定义一个method_()方法,并把对它发生的调用转发到被封装的对象上,比如本例的Assistant对象. Manager类会继承这个method_missing()方法,因此它就成为被封装对象的一个代理.结果,Manager就会把自己无法识别的方法转发给它封装的Assistant.
=end

 

 

转载于:https://www.cnblogs.com/leaf526/p/3643247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值