談談我工作中的23個設計模式,秒懂Java設計模式,上集

猿之生活java技術學堂 發佈 2022-11-24T16:10:32.409044+00:00

談談我工作中的23個設計模式。創作不易,關注、點讚,分享,轉發,評論,收藏。在日常工作中,運用Java設計模式思路,可以更好地去思考理解這些設計模式。

談談我工作中的23個設計模式

創作不易,關注、點讚,分享,轉發,評論,收藏


敘述

從基礎的角度看,設計模式是研究類本身或者類與類之間的協作模式,是對抽象歸納的一個比較好的解決思路。在日常工作中,運用Java設計模式思路,可以更好地去思考理解這些設計模式。

抽象工廠(Abstract Factory):多套方案

抽象工廠就是圍繞一個超級工廠創建其他工廠。這個超級工廠也被稱為其他工廠的工廠。抽象工廠模式屬於創造性模式,它提供了創建對象的最佳方式。在抽象工廠中,接口是負責創建相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都可以根據工廠模式提供對象。

介紹

意圖:提供一個創建一系列相關或相互依賴對象的接口方法,無需指定它們具體的類。

主要解決:解決接口選擇的問題。

何時使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。

如何解決:在一個產品族裡面,定義多個產品。

關鍵代碼:在一個工廠里聚合多個同類產品。

在工作中,我們應該具備提供多套設計方案的能力,提供多種選擇性。需要有這樣的前瞻意識,擴展自己的思維方式。

以下是抽象工廠概述圖

生成器(Builder):善於分解

構建器,也稱為構建器模式,使用幾個簡單的對象逐步構建一個複雜的對象。構建器模式屬於創造性模式,它提供了創建對象的最佳方式。

介紹

意圖:將一個複雜的構建與其具體實現相分離,使得同樣的構建過程可以創建不同的表現形式。

主要解決:主要解決在軟體系統中,有時候面臨著"一個複雜對象"的創建工作。

何時使用:一些基本部件不會變,而其組合經常變化的時候。

如何解決:將變與不變分離開。

關鍵代碼:創建和提供實例,管理建造出來的實例的依賴關係。

工廠方法(Factory Method):抽象思考

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。工廠模式屬於創建型模式,它提供了一種創建對象的最佳方式。

總的來說,在工廠模式中,我們創建對象的過程中,不會對客戶端暴露創建邏輯,通過使用共同的接口,來指向新創建的對象。

工廠方法模式是將提供某一產品的過程進行抽象,通過接口的模式去規範出來。如果我們轉換思維,處理問題的思維邏輯,終究是發現事物的本質:

  1. 到底在做什麼
  2. 我們的職責是什麼
  3. 提供什麼樣的價值。

原型(Prototype):傳承知識

原型模式(Prototype Pattern)是用於創建重複的對象,同時又能保證性能。這原型模式屬於創建型模式,它提供了一種創建對象的最佳方式。

原型模式是實現了一個原型接口,該接口用於創建當前對象的克隆。原型模式是說,利用拷貝對象的方法,減少一些複雜的創建過程。

單件(Singleton):專注

單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。單例模式屬於創建型模式,提供了一種創建對象的方式。單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。

注意:

  • 1、單例類只能有一個實例。
  • 2、單例類必須自己創建自己的唯一實例。
  • 3、單例類必須給所有其他對象提供這一實例。

介紹

意圖:一個類僅有一個實例,具備全局訪問點。

主要解決:全局使用的類頻繁進行創建與銷毀。

何時使用:當節省系統資源。

如何解決:判斷系統是否已經有這個單例,如果有則返回,如果沒有則創建。

關鍵代碼:構造函數是私有的

單件模式是說在多線程的情況下,要保證對象只創建一遍,作為獨一無二的資源。

單例模式的幾種實現方式

單例模式的實現有多種方式,如下所示:

1、懶漢式,線程不安全

是否 Lazy 初始化:

是否多線程安全:

實現難度:

2、懶漢式,線程安全

是否 Lazy 初始化:

是否多線程安全:

實現難度:

3、餓漢式

是否 Lazy 初始化:

是否多線程安全:

實現難度:

4、雙檢鎖/雙重校驗鎖(DCL,即 double-checked locking)

JDK 版本:JDK1.5 起

是否 Lazy 初始化:

是否多線程安全:

實現難度:較複雜

5、登記式/靜態內部類

是否 Lazy 初始化:

是否多線程安全:

實現難度:一般

6、枚舉

JDK 版本:JDK1.5 起

是否 Lazy 初始化:

是否多線程安全:

實現難度:

適配器(Adapter):適應能力

適配器模式(Adapter Pattern)作為兩個不兼容的接口之間的橋樑。適配器模式屬於結構型模式。適配層往往不是提前的設計,而是基於現有現有的系統進行的妥協和適配。

結構圖

介紹

意圖:將一個類的接口轉換成客戶希望的另外一個接口。

主要解決:解決在軟體系統中,將一些"現存的對象"放到新的環境中,而新環境要求的接口是現對象不能滿足的應用場景。

何時使用:

1、系統需要使用現有的類,而此類的接口不符合系統的需要。

2、通過接口轉換,將一個類插入另一個類系中。

如何解決:繼承或依賴。

關鍵代碼:適配器繼承或依賴已有的對象,實現想要的接口。

總的來說,適配器是為了結合原來的能力,適配新的接口服務,比如適配不同的協議入口。

橋接(Bridge):合理關係

橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。橋接設計模式屬於結構型模式.

結構圖

介紹

意圖:將抽象與實現分離,都可以獨立的變化。

主要解決:在有多種可變的情況下,用繼承會造成類擴展性不高,運用起來不靈活。

何時使用:實現系統可能有多個角度分類,每一種角度都可能變化。

如何解決:把這種多角度分類分離出來,讓它們獨立變化,減少它們之間耦合。

關鍵代碼:抽象類依賴實現類。

橋接模式是將原來相互依賴的部分,通過上層接口再往抽象層提一下,減少類之間的直接合作,形成間接關係。

組合(Composite):遞歸思考

組合模式(Composite Pattern),又叫部分整體模式,是用於把一組相似的對象當作一個單一的對象。

結構圖

介紹

意圖:使用戶對單個對象和組合對象的使用具有一致性。

主要解決:客戶程序可以處理複雜元素,從而使得客戶程序與複雜元素的內部結構解耦。

何時使用:

1、對象的部分-整體層次結構(樹形結構)。

如何解決:樹枝和葉子實現統一接口,樹枝內部組合該接口。

關鍵代碼:樹枝內部組合該接口,並且含有內部屬性 List,裡面放 Component。

組合模式通過繼承和孩子節點,可以遞歸地去描述一個對象層次。

關鍵字: