深入理解信號槽

在豆子空間 http://devbean.blog.51cto.com 中發現的,總結的很好,在此記錄一下,共4篇文章

 

深入理解信號槽(一) http://devbean.blog.51cto.com/448512/417658

深入理解信號槽(二) http://devbean.blog.51cto.com/448512/424778

深入理解信號槽(三) http://devbean.blog.51cto.com/448512/426999

深入理解信號槽(四) http://devbean.blog.51cto.com/448512/428364

 

重點在於最後的總結:

 

信號和槽的機制實際上是觀察者模式的一種變形。它是面向組件編程的一種很強大的工具。現在,信號槽機制已經成爲計算機科學的一種術語,也有很多種不同的實現。

 

Qt 信號槽是 Qt 整個架構的基礎之一,因此它同 Qt 提供的組件、線程、反射機制、腳本、元對象機制以及可視化 IDE 等等緊密地集成在一起。Qt 的信號是對象的成員函數,所以,只有擁有信號的對象才能發出信號。Qt 的組件和連接可以由非代碼形式的資源文件給出,並且能夠在運行時動態建立這種連接。Qt 的信號槽實現建立在 Qt 元對象機制之上。Qt 元對象機制由 Qt 提供的 moc 工具實現。moc 也就是元對象編譯器,它能夠將用戶指定的具有 Q_OBJECT 宏的類進行一定程度的預處理,給這個增加元對象能力。

 

Boost.Signals 是具有靜態的類型安全檢查的,基於模板的信號槽系統的實現。所有的信號都是模板類 boost::signal 的一個特化;所有的槽函數都具有相匹配的可調用的簽名。Boost.Signals 是獨立的,不需要內省、元對象系統,或者其他外部工具的支持。然而,Boost.Signals 沒有從資源文件動態建立連接的能力。

 

這兩種實現都非常漂亮,並且都具有工業強度。將它們結合在一起使用也不是不可能的,Qt 4.1 即提供了這種可能性。

任何基於 Qt GUI 的系統都會自然而然的使用信號槽。你可以從中獲取很大的好處。任何大型的系統,如果希望能夠降低組件之間的耦合程度,都應該借鑑這種思想。正如其他的機制和技術一樣,最重要的是把握一個度。在正確的地方使用信號槽,可以讓你的系統更易於理解、更靈活、高度可重用,並且你的工作也會完成得更快。

 

另外,再補充另外兩種信號/槽機制的代碼實現:

1 gobject中的signal http://developer.gnome.org/gobject/stable/signal.html

2 dbus中的signals,http://dbus.freedesktop.org/doc/dbus-tutorial.html, 雖然dbus是進程通信方法,但是本質上,dbus中的signal可以看成是一個遠端對象發出的信號,這個遠端對象,不是在本進程中,而是在另外一個進程中。

 

從設計模式上來看,這些都是觀察者模式的具體代碼實現。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章