@ZEAL Blog·厉
We stand alone,
TOGETHER.

[转]Cpper,Javaer,Rubyer的得意

Posted by zeal on 2005-11-04 18:32 , 1626 characters , Via |  + 0 - 0   English
“就因为同一样事情还有着C++模板、传统Delegate和新兴动态Minxin的选择,让我们这些工蚁,还觉得有些许的自由和左顾右盼的乐趣。” -- 江南白衣@ITO
  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
{...};

typedef SmartPtr
<NoChecking> noCheckPtr;

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

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

   3. Ruby则倚仗自己的动态特性,直接在语言中内建了Mixin特性。
      
module Greetable
   def greet
     puts 
"Your age is, " + self.age
   end
end

class Person
   include Greetable
   def initialize(name, age)
     @name
=name
     @age
=age
   end
   attr_reader :age
end

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

Your age is 
40.

此段代码将Greetable类Minxin进了Person类里头,让其拥有了greet方法。
也多亏了Ruby的动态性,让Greetable可以打印一个自身毫不知情的,其实属于Person的属性age. 
Last Modified on 2007-05-28 10:17
1 条评论:
- cpper (link) 于 2007-02-27 12:07
这个也不能算是cpper的得意。我倒是觉得cpper的得意,恰巧在一般人最不得意的地方。
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | Back To Home | @ZEAL | 沪ICP备05024379号