## 連載:面向對象葵花寶典:思想、技巧與實踐(37) - 設計模式:瑞士軍刀 or 錘子?
“設計模式”這個詞幾乎成為了軟件設計的代名詞,很多人非常天真的以為掌握了設計模式就掌握了軟件設計,但實際上如果只是握了設計模式,軟件設計的門都還沒摸到!
========================================================
談起設計模式,那是幾乎無人不知,無人不曉,大名鼎鼎的“GOF”(中文有的翻譯為“四人幫”)驚世之作,真是“平生不識GOF,學盡設計也枉然!”
?
然而,設計模式真的是軟件設計的“瑞士軍刀”,切、削、鋸、鉆樣樣精通么?
?
讀過設計模式的朋友估計不少,但真正注意過《設計模式》的副標題的估計很少,而這個副標題卻是避免誤解設計模式的關鍵。《設計模式》的副標題是:可復用面向對象軟件的基礎!
?
?不要小看了這短短的一句話,如果你沒有看這句話,或者只是一掃而過并沒有仔細體會,那么你很可能就認為設計模式是一把“瑞士軍刀”,能夠解決所有的設計問題,而實際上“**設計模式只是一把錘子**”,有個諺語叫做“如果你手里有一把錘子,那么所有的問題都變成了釘子”,如果你拿著設計模式這把錘子倒出去敲,要么東西被敲壞,要么就不起作用。
?
為什么說設計模式只是一把錘子呢?我們還是從副標題來看。《設計模式》的副標題揭示了《設計模式》的兩個主要約束:
?
1)設計模式解決的是“可復用”的設計問題;
2)設計模式應用的領域是“面向對象”;
?
相信經過我這么一提醒,大家基本上都能夠明白了為什么“設計模式只是一把錘子”了:
?
1)設計模式只能解決“可復用”的設計問題,其它的例如性能設計、可靠性設計、安全性設計、可服務性設計等都不是設計模式能夠解決的;
?
2)設計模式只是在面向對象的語言中應用,如果是非面向對象的語言,就不怎么好用了。當然,你可以在C語言中用上設計模式,但畢竟要折騰不少,用起來也不那么得心用手。
?
所以,當你遇到一個問題就想到設計模式的時候,一定要注意“設計模式只是一把錘子”,不要拿著這把錘子到處去敲!
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版