Java設計模式系列一(前言)
說起設計模式,很多人都會覺得這個概念很熟悉,會想到單例模式、工廠模式等等,但是似乎又說不出來什麼,說不上它的核心思想和設計原則。其實我們的專案中,為了程式碼複用,增加可維護性,很多地方都用到了設計模式,它的思想和設計精髓貫穿每一個系統設計。
今天整理了一下以前的專案和筆記,發現也只不過用到了常用的幾種設計模式,還有很多我聞所未聞,甚至連模式的名字都沒有聽過,它們提供了軟體開發過程中面臨的一般問題的最佳解決方案。學習這些模式有助於經驗不足的開發人員通過一種簡單快捷的方式來學習軟體設計。所以決定寫這個系列文章,學習的同時和大家一起分享。在具體到每一個設計模式的例項之前,我覺得有必要先簡單認識和了解一下什麼是設計模式,先對這些概念有一個大概的印象,然後再深入下去。
設計模式簡介
設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向物件的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。
設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使程式碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。
設計模式基本要素
設計模式主要有四個基本要素:
-
模式名稱(pattern name):一個助記名,它用以兩個詞來描述模式的問題、解決方案和效果。
-
問題(problem):描述了應該在何時使用模式。
-
解決方案(solution):描述了設計的組成成分,他們之間的相互關係及各自的職責和協助方式。
-
效果(consequendes):描述了應用的效果及使用模式應權衡的問題。
設計模式分類
設計模式主要分為三大類:
建立型模式:用於描述“怎樣建立物件”,它的主要特點是“將物件的建立與使用分離”。主要有以下5種模式:
-
工廠方法模式(Factory Pattern)
-
抽象工廠模式(Abstract Factory Pattern)
-
單例模式(Singleton Pattern)
-
建造者模式(Builder Pattern)
-
原型模式(Prototype Pattern)
結構型模式:用於描述如何將類或物件按某種佈局組成更大的結構。主要有以下7種模式:
-
介面卡模式(Adapter Pattern)
-
裝飾器模式(Decorator Pattern)
-
代理模式(Proxy Pattern)
-
外觀模式(Facade Pattern)
-
橋接模式(Bridge Pattern)
-
組合模式(Composite Pattern)
-
享元模式(Flyweight Pattern)
行為型模式:用於描述類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,以及怎樣分配職責。主要有以下11種模式:
-
策略模式(Strategy Pattern)
-
模板方法模式(Template Pattern)
-
觀察者模式(Observer Pattern)
-
迭代器模式(Iterator Pattern)
-
責任鏈模式(Chain of Responsibility Pattern)
-
命令模式(Command Pattern)
-
備忘錄模式(Memento Pattern)
-
狀態模式(State Pattern)
-
訪問者模式(Visitor Pattern)
-
中介者模式(Mediator Pattern)
-
直譯器模式(Interpreter Pattern)
下面是我畫的一張設計模式歸類圖,大家參考一下:
設計模式遵循原則
設計模式遵循6大原則,分別為:
-
開閉原則(Open Close Principle):對擴充套件開放,對修改關閉。
-
里氏代換原則(Liskov Substitution Principle):只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加新的行為。
-
依賴倒轉原則(Dependence Inversion Principle):這個是開閉原則的基礎,對介面程式設計,依賴於抽象而不依賴於具體。
-
介面隔離原則(Interface Segregation Principle):使用多個隔離的藉口來降低耦合度。
-
迪米特法則(最少知道原則)(Demeter Principle):一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模組相對獨立。
-
合成複用原則(Composite Reuse Principle):原則是儘量使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。
設計模式之間的關係
(此圖不是我畫的,是網路圖,我也沒有完全弄懂,接下來的例項中我會慢慢摸索。)
以上是整理的關於設計模式一些概念性的東西,不管是應付面試還是真心想學習設計模式提高自己軟體開發技能的人員,都可以記一下,加深設計模式在我們腦海中的印象。下一篇開始,將介紹常用設計模式的具體例項。
如果覺得本文有用,請推薦給更多有需要的人,謝謝!如果發現問題,歡迎留言,請隨時批評改正,謝謝!
相關推薦
Java設計模式系列一(前言)
開發十年,就只剩下這套架構體系了! >>>
Java設計模式系列十三(外觀模式)
故事一 A:聽說最近出了某款遊戲超好玩,但是我電腦帶不起來,需要個組裝機玩遊戲。 B:你說XX遊戲嗎?真的很好玩,筆記本玩不了
java設計模式學習筆記(三) --- 行為型模式
文章目錄 責任鏈模式 策略模式 命令模式 直譯器模式 迭代器模式 中介者模式 備忘錄模式 觀察者模式 狀態模式 模板方法模式 訪問者模式 責任鏈模式 我獲取了一個物件,現在需要根據物件
java設計模式學習筆記(二)--- 結構型模式
文章目錄 介面卡模式 組合模式 裝飾模式 代理模式 什麼時候使用代理模式 享元模式 外觀模式(門面模式) 橋樑模式 介面卡模式 介面卡是一個介面轉換器,用於在接收不同的輸入時,得到一致
JAVA設計模式詳解(三)----------裝飾者模式
今天LZ帶給大家的是裝飾者模式,提起這個設計模式,LZ心裡一陣激動,這是LZ學習JAVA以來接觸的第一個設計模式,也許也是各位接觸的第一個設計模式。記得當初老師在講IO的時候就提到過它:“是你還有你,一切拜託你。”沒錯,這就是裝飾者模式最簡潔的定義了。下面LZ引出標準的定義(
JAVA設計模式詳解(五)----------狀態模式
各位朋友,本次LZ分享的是狀態模式,在這之前,懇請LZ解釋一下,由於最近公司事情多,比較忙,所以導致更新速度稍微慢了些(哦,往後LZ會越來越忙=。=)。 狀態模式,又稱狀態物件模式(Pattern of Objects for States),狀態模式是物件的行為模式。
java設計模式--責任鏈(三)
問題:java設計模式--責任鏈(二)中的責任鏈結構還不夠完美,在實際的應用中,訊息在從客戶端發到服務端時需要過濾,在返回時也需要被過濾,如下圖所示: 這正是java web的interceptor的功能。 先寫兩個類,一個Request,一個Response,如下: pac
java設計模式--責任鏈(二)
問題:現在已經有一個責任鏈了,現在想將這個責任鏈加到java設計模式--責任鏈(一)的責任鏈中去,如果還沿用之前的方法,擴充套件性方面不足。 解決方案:新建一個FilterChain類,同樣也繼承Filter介面,其程式碼如下: package chanOfResponsibility
java 設計模式 學習筆記(17) 橋接模式
橋接模式: 將抽象部分與它的實現部分分離,使他們多可以獨立的變化。抽象與實現分離,表示抽象類和他的派生類用來實現自己的物件。 在系統中,可能有多角度分類,每一種分類都有可能變化,這時就把這種多角度分離出來讓他們獨立變化,減少各個角度的耦合。
java 設計模式 學習筆記(16) 單例模式
單例模式:保證一個類僅有一個例項,並提供一個訪問其例項的一個全域性訪問點 根據單例模式的定義,寫一個單例模式的例子需要注意兩點: 1.例項有該類自己生成 為了防止客戶程式碼通過 new Singleton()來例項一個物件,需要將 Singleton的預設建構函式
java設計模式系列之設計模式概要(1)
而不是 行為型模式 一句話 創建 rom 多次 ati 代理模式 之間 一、什麽是設計模式 設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
Java 設計模式系列(五)單例模式
重要 理解 iat 版本 ide 默認 ces 內部實現 成功 Java 設計模式系列(五)單例模式 單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 一、懶漢式單例 /** * 懶漢式單例類.在第一次調用的時候實例化自己 * 1. 構造器私
Java 設計模式系列(六)適配器模式
建議 技術 amp (六) image 必須 一起 nts 工作 Java 設計模式系列(六)適配器模式 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式的結構: 類的適配器模式 對象的
Java 設計模式系列(九)組合模式
ima 技術分享 client 索引 有變 int spa 初始 類型 Java 設計模式系列(九)組合模式 將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式使得用戶對單個對象的使用具有一致性。 一、組合模式結構 Component: 抽象的組件對象,為
Java 設計模式系列(十六)觀察者模式(Observer)
for out 其中 如果 observer 業務 ets 同時 hang Java 設計模式系列(十六)觀察者模式(Observer) 觀察者模式是對象的行為模式,又叫發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽
Java 設計模式系列(二三)訪問者模式(Vistor)
聚集 哪些 true 由於 clas .com concrete 為什麽 type Java 設計模式系列(二三)訪問者模式(Vistor) 訪問者模式是對象的行為模式。訪問者模式的目的是封裝一些施加於某種數據結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的數
java設計模式學習筆記(一)--- 建立型模式
文章目錄 簡介 設計模式所遵循的幾個原則 一、工廠方法模式 簡單工廠模式 工廠方法模式 抽象工廠模式 工廠模式小結 單例模式 單例模式小結 建造者模式
java設計模式--責任鏈(一)
責任鏈也可以叫做過濾器或者攔截器,只是不同的叫法而已,都是對當前的資料在使用前做相應的處理。 階段一: 從簡單的例子入手。問題描述:有一個字串,需要對這個字串做一些處理,然後輸出。這裡我定義了一個處理器MsgDealer,用來對字串進行相應的處理,相應的程式碼如下: Main:作為資料的
JAVA設計模式學習筆記(一)
2018年11月03日 12:14:18 築夢^_^ 閱讀數:6 個人分類: JAVA
JAVA版23種設計模式綜合專案(實戰),設計模式綜合應用的
加入組合模式 n面臨的問題 分析前面直譯器模式的實現,會發現對於客戶端而言,並不想要去區分到底是非終結符物件還是終結符物件,只是想要以一個統一的方式來請求解析。 該怎麼解決這個問題呢? n n用組合模式來解決 n組合模式基礎回顧 初識組合模式 n定義 &n