作者:江南白衣 

《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.

就因為同一樣事情還有著C++模板、傳統Delegate和新興動態Minxin的選擇,讓我們這些工蟻,還覺得有些許的自由和左顧右盼的樂趣。