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

來源:互聯網
上載者:User

 原文出處及討論: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.

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.