經典開發模式理解

2022-08-25 09:39:09 字數 3105 閱讀 1259

什麼是開發模式

開發模式是一套立足於特定背景,且擁有一整套可**結果的解決方案。可復用設計元素。(這句話很重要,需要反覆閱讀理解!)

gof經典開發模式包含以下三大類:

建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型模式,共七種:介面卡模式、裝飾器模式、**模式、外觀模式、橋接模式、組合模式、享元模式。

行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

怎樣認識開發模式

認識開發模式,首先我們需要理解"特定背景",其次是"解決方案",最後是欣賞"設計元素"。設計元素包括抽象角度、抽象層次、粒度控制等等許多東西,有很大的藝術性,所以自己體會吧。

理解開發模式

1、工廠方法模式和抽象工廠模式

背景:我們想得到某類東西,這類東西由於屬性不相同,因此有許多個性。我們需要根據我們的需求和引數取得具有特定個性的類,怎樣解決這個問題呢?

解決方案:我們可以提供乙個介面,接受使用者引數,然後在介面實現類裡根據引數生成對應個性類。當然,還應該抽象出產品的抽象類,建立約束,因為這並不能產出所有的產品。這就是的工廠方法模式

背景:我們要生產多個產品族,內部結構變動過大也就是所引數量過大,使用傳參的方式可能就有點牽強。

解決方案:我們不在通過引數統一判定生產什麼產品,而是定義產品的組裝結構,通過對組裝結構的控制達到靈活處理。關注點放到對產品結構劃分和工廠搭配的抽象,這樣我們可以通過例項化不同的工廠來達到動產品族輸出的控制。(抽象工廠模式)

2、單例模式和享元模式

背景:我們多次使用乙個相同的類,如果我們每次使用都建立那系統中不是存在多個相同東西並且佔據記憶體嗎,我們需要優化他,減少記憶體的占用。

解決方案:我們判斷該類是否存在,存在我們就拿來用,沒有就建立乙個用,這樣就減少了記憶體的占用。該方案根據類的不同行為劃分為單例模式和享元模式,但兩者的解決占用記憶體的思路是一致的。

3、建造者模式和模板方法模式

背景:在我們的業務時常會遇到事情過於複雜,我們往往會想著分階段分模組來完成,當我們建立一定的標準流程和模組時,事情的完成變得更加可控。當然,我們某些情況下可能需要重新調整流程,而某些情況下注重模組的完整性。

解決方案:將上面管理方法應用到設計上的就是建造者模式和模板方法模式。建造者模式抽象出流程模組並交給建造者來實現,通過指導者來定製流程解決流程可控性。模板方法模式則是抽象出模組,將模組的個性化實現交到相應子類去實現,保證模組的完整性和個性化設定。

4、原型模式

背景:執行時能否獲得某例項的拷貝並建立新物件,因為我不想在進行一次構造了。

解決方案:通過定義原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。原型模式通過操作二進位制複製原型,這往往比新建乙個速度更快,在需要多次建立物件的情況下能幫助你提高效能。

5、介面卡模式

背景:當使用者期待介面和現有介面不一致時

解決方案:定義客戶期待的介面,然後使用現有介面來例項化客戶期待介面。

6、裝飾器模式

解決方案:建立乙個和被修飾類有相同介面的類,那麼如果我們取到被修飾類,我們使用被修飾類來實現相應的方法,同時我們還有加入自己處理的空間。

7、**模式

背景:不希望直接訪問和需要做許可權控制,並希望控制訪問類的建立減少重複構建消耗

解決方案:建立乙個**類,通過**來取得物件或執行請求

8、外觀模式

背景:背景對外不暴露內部呼叫,而是簡化出服務介面,使不用關心具體的過程。

解決方案:這是服務的介面簡化的思想,使用外觀類來定製一套服務,並對外提供統一的入口。

9、橋接模式

背景:多維變化中如何讓各自部分獨立變化

解決方案:將抽象部分與實現部分分離,使它們都可以獨立的變化。每個維度建立抽象類,使用抽象類來表示例項的耦合變化

10、組合模式

背景:乙個整體由多個部分組成,並需要對部分進行增刪改查等操作。

解決方案:將物件組合成樹形結構以表示「部分整體」的層次結構。組合模式使得使用者對單個物件和使用具有一致性。

11、策略模式

背景:當使用者處理問題有多種策略,如何讓策略可以獨自變化,並使使用者可以根據情況選擇呢

解決方案:義一系列的策略,把每乙個策略封裝起來, 並且使它們可相互替換。使用者根據需求配置相應的策略,處理則通過配置的策略進行處理問題。

12、觀察者模式

背景:讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。

解決方案:抽象出主題和觀察者,並向主題註冊觀察者

13、迭代子模式

背景:順序地訪問乙個聚集中的元素而不必暴露聚集的內部表象

解決方案:這和我們list訪問方式相同,提供迭代訪問而不需要檢視儲存訪問過程。

14、責任鏈模式

背景:需要根據責任和權力來判斷是否處理還是提交給別的處理人處理

15、命令模式

背景:呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動。

解決方案:每乙個命令都需要設計乙個具體命令類,通過傳遞命令執行相應內容

16、備忘錄模式

背景:需要記錄某一之前狀態,以便獲取或恢復

解決方案:抽象出乙個備忘錄類來保持之前狀態的資料,通過乙個管理類來管理這個備忘錄類。

17、狀態模式

背景:當乙個物件的內在狀態改變時允許改變其行為

解決方案:將物件的狀態獨立處理,並在各自狀態描述對應的行為,使用各自狀態行為去完成請求

18、訪問者模式

背景:操作元素相對固定,操作方式多樣化

解決方案:每個訪問者定義對對應元素的操作方式

19、中介者模式

背景:多個物件需要相互互動,導致了緊密耦合,不利於物件的修改和維護。我們希望只需關心自己能做什麼就行,不需要再關係做了之後會對其他物件產生什麼影響,也就是無需再維護這些關係。

解決方案:利用第三者來管理關係和互動那就是我的中介,物件只需要知道中介,通過中介進行互動即可。而中介持有所有物件,並負責管理他們的互動關係和邏輯

20、直譯器模式

背景:擴充套件現有語法環境

解決方案:自定義表示式,並使用一套語言規則解析

對MVC開發模式的理解

1 軟體開發有哪些開發模式?答 1 model模式 把介面和業務邏輯都放在一起 優點 簡單,容易,適合小專案 缺點 可維護性差,擴充套件性差 2 mv模式 介面和業務邏輯分開寫 優點 有良好的擴充套件性和維護性 適合中大型專案 缺點 不易理解,需要提前設計 3 mvc模式 2 為什麼需要mvc開發模...

MVC開發模式原理解析

jsp什麼都可以做,但是這樣子會很亂,沒有分工。開始慢慢地自己做封裝,以後學習了框架之後這種思想就更加嚴重。jsp 負責介面顯示 servlet 就相當於是控制層,協調jsp和dao的關係 dao data access object 即資料庫訪問物件 做資料庫的操作 又叫做模型層,這裡面有很多查詢...

小經典理解

c是n的百位數或者百位以上的數 b是n的十位數 a是n的個位數2.123 10 12 123 10 3 是除法,應為123和10是整形,所以結果只保留整數字,得12 是求模,就是餘數123除以10餘數是33.include stdio.h int sum 0 while scanf d d 0 if...