學習設計模式的一些常見問題

2021-08-31 17:24:29 字數 1442 閱讀 8324

學習設計模式的一些常見問題

[b]1. 模式有沒有標準形式?[/b]

gof為了描述每一種設計模式,給它們定義了四個基本要素,旨在模式使模式能夠得到廣泛傳播,這並不代表gof給出的模式就是標準模式。事實上,他們也沒有給每一種模式給出標準,而是很多地方給出了它們可能的變化,比如像組合(composite)模式,有透明的組合模式,也有安全的組合模式,還例如觀察者(observer)模式,有push和pull兩種形式。

這些設計模式只是為常見問題給出經驗人士的乙個參考方案,避免我們重複的發明輪子,而沒有血統之分(哪個標準,哪個不標準),所以這個問題是個偽命題。

[b]2. 設計模式和oo什麼關係?[/b]

設計模式最初引入的時候,正處於物件導向設計高速發展時期,那些模式都是來自成功的物件導向系統的某些部分,所以這23個最基本的模式都是關於物件導向的,但這不表示只有物件導向才有模式。我們知道,模式是是某一上下文環境中乙個問題的常用解決方案,那麼,soa(service-oriented architecture)可以有模式,agile也可以有模式,osgi(open services gateway initiative)也有模式。

[b]3. 能不能創造新的設計模式?[/b]

完全可以,只要你能給乙個上下文的問題給出乙個通用的解決方案,並能使用gof的四個基本要素描述它們。但是要避免重複的發明輪子,你必須了解你創造的是否已經存在,或者是否是已存在模式的變種。

[b]4. 學習了設計模式,就等於學會了設計?[/b]

學習設計模式只是借鑑oo專家的成功經驗,要學會設計,還得向他們一樣,學會使用oo的眼光看待問題,解決問題。這樣,在解決問題的過程中,模式就會手到擒來,並且自然地變化它們以適應你的問題本身。

[b]5. 設計模式是oo設計的根本嗎?[/b]

解決問題才是根本,模式只是關於解決問題的經驗總結。筆者最初學習設計模式之後,以為優雅的設計就是盡可能的使用設計模式,所以在解決問題是刻意的套用它們,出現了一些拙劣的設計。後來讀取了eric evans的《domain-driven design: tackling complexity in the heart of software》一書,才意識到為領域建模的重要性,為解決問題,要為你的領域問題建立合理的模型,既然oo能夠為軟體程式設計帶來巨大的變化,我們就要學會使用oo的眼光分析問題,享受oo給程式設計帶來的莫大好處。

於是緊接著,在後來的乙個軟體開發中,我開始從問題本質入手,「忘卻」模式,為問題提取模型,等設計開發完成之後,發現,我已經自然而然的使用了組合(composite)模式和直譯器(interpreter)等模式。至此,我才意識到使用oo眼光分析問題的重要性,所以,這本書籍並不是單純介紹模式的書籍,而是和大家一起**oop,分析oop給程式設計帶來的好處,希望閱讀完本書的人都能開始使用oo的眼光分析問題。

[b]6. 軟體的核心是什麼?[/b]

軟體的核心是模型,為複雜領域問題提取精煉的模型是根本。我們要學會使用oo這把利器,借助它的眼光來分析問題解決問題,這樣才能做出客戶滿意的軟體。

dedecms一些常見問題

1 list和arclist的區別 首頁的列表呼叫,以及其它內頁的側邊欄,這些地方都可以使用arclist標籤,並且還可以根據typeid id 來指定呼叫哪個欄目下的列表 list 標籤還有乙個不同處就是分頁,我們知道在 製作中分頁功能是 欄目列表頁必不可少的乙個功能,而這個功能用arclist標...

Redis一些常見問題

1.多個系統同時併發競爭乙個key zookeeper分布式鎖 儲存到mysql的時候帶有時間戳 這樣redis裡面存的也有時間戳了 2.redis執行緒模型 核心操作模組 如網路請求模組 由單執行緒完成,當然另外還有一些 輔助線程 從旁協助,比如 lru 的淘汰過程。為什麼之前網路請求模組為什麼沒...

ubuntu的一些常見問題

但是我操作上出現問題,執行命令cp libflashplayer.so usr bin forefox,結果就悲劇了,firefox啟動不了。解決方式 適用了下把firefox的檔案copy到usr bin目錄下,但是不成功,所以就解除安裝了firefox,又裝了一遍。sudo apt get re...