delegator java_项目中Delegator的运用来实现偷天换日的能力

Delegator中文名可以叫托管,委托.在JAVA中是一种比较高深的设计模式.跟继承的思想有一点点像,但远比继承来的灵活.简单来理解,可以与现实世界来类比,你交给另一个类帮你打点点事件,有点像助理.这个助理可以帮几个人同时打点事件.也可以自己额外做些事件.今天在项目中,遇到了一个类似的问题:以前的代码:o = M1::M2::Klass.newo.method( :a=> 1 )o.met...
摘要由CSDN通过智能技术生成

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值