Modern C++ Design, Spring Framework和Ruby的Mixin....

博客指出《Modern C++ Design》里的Policy - Base Class、Spring式IoC container的依赖注入、Ruby的Mixin特性,虽分别是C++、Java、Ruby开发者得意之事,但都指向多重行为组合问题。还介绍了Policy - Base是通过混合使用模板与C++多重继承达成。

原文出处及讨论:http://www.blogjava.net/calvin/archive/2005/11/01/17678.html

作者:江南白衣

《Modern C++ Design》里的Policy-Base Class是Cpper得意的一样事情;
Spring 式IoC container 的依赖注入是Javaer得意的一样事情;
Ruby的Mixin特性是Rubyer得意的一样事情。

有趣的是,各自得意的事情,指向的是同一个问题:多重行为的组合。

1 .Policy-Base是混合使用模板与C++的多重继承达成的:
最终类多重继承模版类,由模版传入实际的行为类(Policy Class)。

template < class CheckingPolicy >
class SmartPtr : public CheckingPolicy
{...};

typedefSmartPtr
< NoChecking > noCheckPtr;

上段代码,在编译期把NoChecking类传入到SmartPtr中,组合成noCheckPtr类。而实战中,还会用到"template template parameter"....

2 .Java则紧守最古老的委托模式来达成:
最终类拥有实际施行各种行为的行为类的指针。所有最终类的方法都将委托给行为类来执行。如果行为多样时,采用基于接口编程。同时利用Java的反射特质,用IOC Container根据配置实现注入的自动化。

3. Ruby则倚仗自己的动态特性,直接在语言中内建了Mixin特性。
moduleGreetable
defgreet
puts
" Yourageis, " + self.age
end
end

class Person
includeGreetable
definitialize(name,age)
@name
= name
@age
= age
end
attr_reader:age
end

person
= Person. new ( " Bruce " , 40 )
person.greet

Yourageis
40 .

此段代码将Greetable类Minxin进了Person类里头,让其拥有了greet方法。
也多亏了Ruby的动态性,让Greetable可以打印一个自身毫不知情的,其实属于Person的属性age.

就因为同一样事情还有着C++模板、传统Delegate和新兴动态Minxin的选择,让我们这些工蚁,还觉得有些许的自由和左顾右盼的乐趣。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值