純屬寫著看(全是一己之見) 設計模式

2021-08-26 17:53:59 字數 3589 閱讀 5669

取自《大話設計模式》,這本書寫得挺好的。

1.簡單工廠模式

對於不變的抽象成類,通過繼承實現相同的操作,通過工廠類生成抽象類,而具體根據type值選擇相對應的子類進行返回。唯一不好的是在前台呼叫時會顯出工廠類,通過策略模式可以進一步隱藏工廠類。

2.策略模式

簡單工廠是生成相應子類的地方,而策略模式是呼叫子類功能。通過物件引數來呼叫物件引數的統一方法。但是在呼叫context上下文類時,會暴露各種具體的策略子類。 通過簡單工廠+策略模式會緩解該情況,但是不能避免需要switch 條件分支判斷。

3.簡單工廠 + 策略模式

繼續使用type 字元型別生成相對應的策略子類並直接進行呼叫方法,而不是返回類,這樣使得策略類不會被前端發現,而只暴露了簡單工廠和策略混合的context類。感覺上是優於簡單工廠和策略模式。

4.設計原則--看題目即懂,感覺有些都重複。

單一職責原則、開放-封閉原則、依賴倒轉原則、裡式代換原則

依賴倒轉原則:重要思想是要針對介面程式設計,不要對實現程式設計。

裡式代換原則:子型別必須能夠替換掉父型別,也就是子類實現父類的所有功能。

5.裝飾模式:與建造者不同,可能無數個打扮方案。與人穿衣服,不能一成不變。

一套裝飾,需要按照一種步驟連環套,所以需要乙個鎖鏈也就是設定乙個物件屬性,設定該物件的set方法,裝飾類起鎖鏈的作用,而component起輸出自己衣物的描述特徵。同時裝飾類要繼承component類,實現其顯示的功能描述。

component是需要被裝飾的物件,而decorator是裝飾component 套服裝的類。

這樣可以打造不同的穿衣風格。

6.**模式

代替某物件實現,物件想要的操作。實現方式:定義介面,具體物件實現介面,**實現介面,**的構造方法傳入介面,介面為**類的物件屬性,在介面方法中進行包裹具體物件介面方法的操作步驟。

1.靜態**(個人感覺比裝飾類簡單些,但是內容大體一致,只是靜態**不需要多次裝飾,也就是相當於裝飾一次。)

7.工廠方法模式

工廠方法是在簡單工廠的基礎上,生成多種具體的工廠,類的數量變多。

8.原型模式

原型模式就是繼承原型類的抽象方法clone,在clone裡面進行clone 操作,現實中有icloneable介面,可以直接實現介面,重寫clone方法。這裡面的乙個重要概念是淺複製和深複製。對於常見的基本資料型別使用clone 方法都是淺複製,但是使用引用型別的clone 方法,只是會複製乙個引用,也就是沒有新的物件產生,這時候就需要考慮深複製,對類裡面的物件屬性所對應的類也需要繼承icloneable方法,使得每個層次都是最小粒度,如果有粗粒度,就對該粒度的類實現介面。

9.模板方法模式

模板方法:將子類相同**提取到父類,而將細節的改變利用虛方法,讓子類實現,這樣達到了很好的復用功能。

這裡前幾天看了乙個例項,在框架裡用模板一般是通過多型機制,根據自己的需要實現模板類中的介面方法。與callable和hook的設計思想相同,將需要自定義的給他定義好乙個介面,傳參時可以傳入該介面,假設有一情景,模板類m設計要呼叫irun 介面的run 方法,此時程式中已經定義了irun介面,並定義run 方法,此時設計該模板的方法的傳入引數為irun,此時程式設計師如果想用該方法時,需要傳入乙個實現irun介面的子類且要實現run方法,而run方法是自定義的,從而實現了模板方法該不變的不變就是模板,該變的就是傳入引數---介面。

10.外觀模式:

外觀模式,在外觀類裡面有較多的物件屬性,通過方法,來設計不同物件的方法呼叫方式,而在外顯示一種方法的呼叫。外觀模式將所涉及的類物件進行了封裝一樣。

11.建造者模式:建造類需要穩定的步驟結構。

總共需要設計者,建造者,建造者具體類。設計者是建立乙個建造者物件,而在該設計方法中,呼叫每個建造者所必須實現的虛方法,然後每個具體建造者需要實現建造者所設計的虛方法。

12.觀察者模式:

觀察者是需要實現更新的一方,主題者是通知的一方,主題者需要具有增加刪除自己需要管理的觀察者物件,當通知時,可以告知所有所屬的具體觀察者更新自身的方法。

使用場景,乙個物件的狀態變化需要告知所有與它關聯的物件進行相應改變時,需要使用觀察者模式。

本書中分析了,雖然乙個物件的狀態改變了無數個與它關聯的物件的動作,但是不能保證每個寫好類中有相同的更新方法,而應該是不同的方法名稱。所以引出了委託的概念,這樣,主題者只需要將需要通知的物件的方法進行儲存,然後呼叫自己的方法進行遍歷。

13.抽象工廠模式

個人感覺抽象工廠模式和工廠模式都差不多,如果不暴露具體工廠將會使得**得到極大簡化,此時引入了依賴注入的概念,這個專門針對swith條件判斷生成哪個類的問題,在spring中會使用依賴注入,比如sessionfcatory的賦值,只需要配置乙個db.propertise檔案,即可輕鬆更換具體應用中的資料庫。

14.狀態模式

狀態模式是為了減少條件狀態判斷語句,如果有清晰地長判斷語句,可以使用狀態模式進行控制,每一種條件分支的語句可以抽象為一種狀態,然後在為work類設定初始狀態,在狀態裡面可以設定work 類的下乙個狀態。

15.介面卡模式

介面卡模式是在需要使用現存類的介面,但是介面名稱不同時,需要使用的模式。總共有兩種介面卡。一般設計的功能相同但是方法名稱不同時,而通過乙個介面卡來呼叫另乙個介面中的相同功能的方法,但是一般不提倡 這個模式,只有兩邊都很難修改時,才會考慮該模式。也有在使用第三方軟體時,介面不同時,使用介面卡模式。

16.備忘錄模式

感覺中這裡的備忘錄管理者用處不太大,它在這裡的作用就是返回originer 建立的備忘錄物件,將其返回給originer。

17.組合模式

18.迭代器模式

19.單例模式

20.橋接模式

21.命令模式

全是一陣風

記的以前講過要搞手機實名制,後來就沒了動靜。今天看到一則新聞,說 廣東買手機卡要實名 了,這就想起來了,原來手機實名制還沒有搞起來啊。咱們做一件事兒咋就這麼難呢?銀行排隊也問題也是,熱炒了一陣,現在沒人講了。前天到銀行辦事,足足排了我大半個小時的隊。確實大中午的,人家銀行職員也要休息,但老百姓平時也...

寫一些生活的瑣事(純屬發洩)

今天我的小姑姑來看我奶奶 行了,她說我一直不來看。好吧,我的確是不大看我的奶奶。我痛苦的是我的家庭並沒有像其他人家那樣。我從小開始,到現在,沒有感受到我是生活在乙個正常的家庭中的。父母並沒有離婚,小時候我卻和奶奶吃飯,父母也分開吃飯。後來長大以後,我和母親吃飯,可還是和父親很陌生。彷彿,我不認識他。...

乙個寫著玩的 bitcoin 客戶端

看書確實是很好的學習位元幣的方法,但是沒有 的幫助,理解位元幣如何實現時,很是困難。因此,想去閱讀其 實現。在閱讀 bitcoin core 用 c 客戶端時,其環境和除錯對我來說實在麻煩,我看不太懂。後來發現乙個用 js 寫的完整 bitcoin 客戶端,就決定用它來研究位元幣原始碼了,幫助我理解...