Delegator中文名可以叫托管,委托.
在JAVA中是一种比较高深的设计模式.跟继承的思想有一点点像,但远比继承来的灵活.
简单来理解,可以与现实世界来类比,你交给另一个类帮你打点点事件,有点像助理.
这个助理可以帮几个人同时打点事件.也可以自己额外做些事件.
今天在项目中,遇到了一个类似的问题:
以前的代码:
o = M1::M2::Klass.new
o.method( :a=> 1 )
o.method( :a=> 2 )
要求在尽可能不改动原有代码的基础上,增加功能:
1. 检查每次调用的方法的参数是否符合它的原有代码的注释
注释类似于(非常规范严格)
#id=>a,name=>参数,type=>s,must=>true,default=>"",value=>"{text}",descrip=>"ok"
这个注释是说方法必须具有 hash[:a]这个参数,如果没有就应当报错.
乍一看,不改变表现代码就增加功能? 怎么可能嘛....
No,由于开发使用的ruby,并且采用的惯例配置,使这个需求成为可能.
我们的项目惯例如下:
所有的类名与自己所在的文件名一致,目录与所在的模块一致.
即:
M1:M2:Klass 所在文件为 /m1/m2/klass.rb
以下看如何实现:
首先,由于M1::M2::Klass本身设置为按需加载(如何实现?)
代码如下:
class Module
def const_missing(name)
name = self.name.