我們發(fā)現(xiàn)設(shè)計模式在Java社區(qū)很流行,但是在C++社區(qū)卻沒有那么被關(guān)注,甚至有點被排斥,究竟是什么原因造成這個差異的呢?
昨天和同事討論這個問題,最后得出幾點原因:
(1)C++內(nèi)存需要自己管理,所以有些模式在C++里使用不是那么方便,但是Java不用關(guān)心內(nèi)存,所以在Java里的使用設(shè)計模式有天生的優(yōu)勢。隨著shared_ptr, weak_ptr, unique_ptr等加入C++11,相信這方面會有所改進。
(2)在Java的類庫體系中,很多設(shè)計本身就是基于設(shè)計模式的,所以在調(diào)用Java類庫時,你會不知不覺地使用設(shè)計模式,這樣導(dǎo)致你在設(shè)計自己的接口時也會使用設(shè)計模式。
(3)C++一般被用來解決一些比較底層的問題,所以用C++時,我們更多的關(guān)心是如何實現(xiàn)某個feature; 但是Java借助其豐富的類庫,實現(xiàn)feature往往不是問題,所以他們有更多精力關(guān)注設(shè)計。
(4)設(shè)計模式一般要間接層,會造成性能的損失,而C++應(yīng)用的場合往往比較強調(diào)性能。對于這個問題,如果你的程序更注重性能(比如內(nèi)核),確實不應(yīng)該引入太多間接層;但是如果你的程序更注重可擴充性和可維護性,你就該考慮設(shè)計模式了。
(5)C++社區(qū)的很多程序員是從c甚至匯編轉(zhuǎn)過來的,所以這些人更習(xí)慣面向過程的設(shè)計方式,即使用C++也只是拿來封裝一些簡單的類,用不到設(shè)計模式。
(6)C++支持多種編程模型,包括面向過程,面向?qū)ο螅趯ο螅盒途幊痰龋O(shè)計模式主要是基于面向?qū)ο蟮模鳭ava只支持面向?qū)ο箝_發(fā)。
最后貼張某校的招生海報,你看看究竟是C, 還是C++?你是怎么看設(shè)計模式在C++社區(qū)的使用情況呢?

posted on 2012-06-14 09:22
Richard Wei 閱讀(5361)
評論(13) 編輯 收藏 引用 所屬分類:
設(shè)計模式