2015-07-10 68 views

回答

1

我建議這個職位從Donal Fellows on Programmers

一些語言是相當強烈的靜態的,只允許兩個類之間的繼承關係的 規範在 這些類定義的時間。對於C++,定義時間爲 幾乎與編譯時間相同。 (它在 Java和C#中略有不同,但不是很多)。其他語言允許動態重新配置類(以及Javascript中類對象類型的對象)的關係;有些甚至允許修改現有對象的 類,或者改變 類的超類。 (這可能會導致總邏輯混亂,同時也可以 模型現實世界中的髒東西相當不錯的。)

但對比這組成,其中一個物體和另一個的 關係不是他們 類定義是很重要的關係(即,他們的類型),而是由參考文獻 ,每個關係與另一個。通用組合是一種非常強大而且無處不在的安排對象的方法:當一個對象 需要知道另一個對象時,它會引用該對象並根據需要在其上調用方法。只要你 開始尋找這種超級基本模式,你會發現它絕對無處不在,你會發現它 ;避免它的唯一方法是把所有的 都放在一個對象中,這將會非常愚蠢! (還有更嚴格的 UML組合/匯聚,但這不是GoF的書是什麼 談論那裏。)

一個關於組合關係的事情之一是, 特定對象不需要是硬約束,以彼此。具體對象的 模式非常靈活,即使在非常靜態的 語言(如C++)中也是如此。 (讓事情非常靜態是有好處的: 可以更密切地分析代碼,並且至少有可能在更少的開銷下發布更好的代碼。)回顧一下,與許多其他動態語言一樣,可以使用Javascript假裝它 根本不使用匯編;當然只是假裝,但是基礎語言模型不需要轉換爲固定的中間格式(例如,「磁盤上的二進制可執行文件」)。編譯完成的操作在運行時完成,如果事情變化太大,可以輕鬆重做 。 (迷人的是,這樣的編譯好的 工作就可以完成,甚至從一個非常有活力的 基礎開始...)

一些GOF模式才真正有意義的語言 的背景裏的東西是相當穩定。沒關係;它只是意味着並不是所有影響模式的力量都必須列出。關於學習模式的一個關鍵點 是它幫助我們瞭解這些重要的差異和注意事項。 (其他圖案更普遍 保持你的眼睛爲這些開放。)

profile for 74U n3U7r1no at Stack Overflow, Q&A for professional and enthusiast programmers