常用的設計模式 介紹

2022-03-17 15:29:34 字數 2625 閱讀 8501

本文將會用最直白的話記錄常用的設計模式的 思路,但是基本不會給出實現**。

mvc 模式

mvc (model view controller 模型-檢視-控制器)設計建立 web 應用程式的模式。他的核心思路是在後端已經將**的資料全部處理好,然後全部推送到前端進行資料的展示,前端只負責資料的顯示,並不關心具體的業務邏輯。(這個和 三層架構說起來有點像  有空我會專門總結一篇二者的區別)

工廠模式

應用背景

工廠類負責建立的物件比較少;

客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心;

由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。

工廠模式就相當於建立例項物件的new,我們經常要根據類class生成例項物件,如a a=new a() 工廠模式也是用來建立例項物件的,所以以後new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴充套件性和盡量少的修改量。

消費者模式

生產者消費者模式並不是gof提出的23種設計模式之一,23種設計模式都是建立在物件導向的基礎之上的,但其實面向過程的程式設計中也有很多高效的程式設計模式,生產者消費者模式便是其中之一,它是我們程式設計過程中最常用的一種設計模式。

生產者消費者模式的原理描述:

(1)生產者僅僅在倉儲未滿時候生產,倉滿則停止生產。

(2)消費者僅僅在倉儲有產品時候才能消費,倉空則等待。

(3)當消費者發現倉儲沒產品可消費時候會通知生產者生產。

(4)生產者在生產出可消費產品時候,應該通知等待的消費者去消費。

介面卡模式

將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

換句話就是:原本提供的介面  我們無法使用,那麼我們就做個中間層,讓中間層呼叫對方的介面,我們直接呼叫中間層就可以了

facade模式 //外觀模式

為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。

換句話就是:底層有很多方提供的介面,使用某乙個方法的時候需要去尋找到特定的介面,這樣就比較麻煩,所以做乙個高層的介面把他們都給統一了。

觀察者模式//observer

有時又被稱為發布-訂閱模式,比較直觀的一種是使用一種「註冊——通知——撤銷註冊」的形式。

換句話就是:觀察者訂閱了某一種訊息,然後到被觀察者觸發了某乙個事件之後,觀察者就相應的做一些列動作。這個類似於c#裡邊的事件。

單例模式//singleton 

這是用的最多的模式,每乙個正式的軟體都要用它。全域性配置、唯一資源,

它用來確保只產生乙個例項,並提供乙個訪問它的全域性訪問點。

狀態模式//state

不同的狀態,不同的行為;或者說,每個狀態有著相應的行為.

換句話就是:當乙個物件的狀態屬性變了之後,那麼他可以呼叫的方法也都變了。比如物件是蝌蚪的時候有哪幾種方法可以用,物件是青蛙的時候又有哪些方法可以用

裝飾模式//

decorator

又叫油漆工模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

換句話就是:想要在現有的物件上增加一些新的屬性和功能,比如new 出來乙個跑車的類,這時候我們可能要往跑車裡邊加香水這個物件了,於是可以在香水的類裡邊寫乙個   以跑車為引數的方法,進行修飾跑車

建造者模式//

builder

在軟體系統中,有時候面臨著「乙個複雜物件」的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法確相對穩定。如何應對這種變化?如何提供一種「封裝機制」來隔離出「複雜物件的各個部分」的變化,從而保持系統中的「穩定構建演算法」不隨著需求改變而改變?這就是要說的建造者模式。

換句話說就是:

比如你去kcf 訂了乙份 kfc 豪華晚餐,然後對服務員說  我要豪華晚餐,服務員這時候回頭對三個廚師說  乙份可樂,乙份雞翅 ,乙份漢堡,然後三個廚師做好了之後擺在盤子上,然後服務員對你說 做好了,快拿去吃吧。kfc的這種模式就相當於是建造者模式,他不是由服務員自己 哼哧哼哧的去把東西都做好了然後給你,而是將乙個大份的東西,交給多個人去做,做好了之後再統一給你。

策略模式//strategy

它定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。

換句話就是:我們解題的時候,有很多解題的方法,寬泛的來說有以下幾種,一步一步的把題目給解答出來,還有使用排除法,還有窮舉法,還有可以把答案背下來(原樣輸出),還可以去看下別人的做法。總之有非常多的做法,但是我們要針對不同的題目使用不同的方法,而不能使用單一的某一種方法,比如寫語文作業的時候,應該沒有人用排除法。

原型模式//(prototype pattern)

在軟體系統中,有時候面臨的產品類是動態變化的,而且這個產品類具有一定的等級結構。這時如果用工廠模式,則與產品類等級結構平行的工廠方法類也要隨著這種變化而變化,顯然不大合適。

換句話就是:比如要生產每個人的學准生證,我們不可能找到廠家說,每個學生單獨有一條生產線來生產這個學生大學的學生證,而是生產一大堆模子(也就是還沒填寫名字年齡的這種原始狀態的學生證)然後交到班主任手裡,哪位學生來領學生證,或者來補辦,然後老師就把上邊的名字 填好了,貼好這個學生的**,然後再發到學生手裡。

待續ing

設計模式 常用的設計模式介紹

簡單點說,就是乙個應用程式中,某個類的例項物件只有乙個,你沒有辦法去new,因為構造器是被private修飾的,一般通過getinstance 的方法來獲取它們的例項。getinstance 的返回值是乙個物件的引用,並不是乙個新的例項 懶漢式 執行緒不安全 public class singlet...

設計模式介紹

我的設計模式入門是head first pattern,可以說是比較好的入門書籍,教程上講解了常用的設計模式,並不全面。作為入門足夠,通俗易懂。設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類的 設計經驗的總結。使用設計模式的目的 為了 可重用性 讓 更容易被他人理解...

設計模式介紹

1 簡介 設計模式是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。毫無疑問設計模式於己於他人於系統都是多贏的 設計模式使 編制真正工程化 2 分類 1 建立型模式 通常和物件的建立有關,涉及到物件例項化的方式。共5種模式 ...