您好,登錄后才能下訂單哦!
Java 中一般認為有 23 種設計模式,我們不需要所有的都會,但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。雖然不需要全會,當然能掌握的越多越好。
總體來說設計模式分為三大類:
創建型模式共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式共7種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式共11種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
由于篇幅的限制,沒有辦法把23種設計模式全部詳細的分享給大家,但是整理成了Pdf資料可以分享,關注我的供種號(Java周某人)即可
定義:
Ensure a class has only one instance, and provide a global point of accessto it.(確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例。)
通用代碼(是線程安全的)
使用場景:
● 要求生成唯一序列號的環境;
● 在整個項目中需要一個共享訪問點或共享數據,例如一個 Web 頁面上的計數器,可以不用把每次刷新都記錄到數據庫中,使用單例模式保持計數器的值,并確保是線程安全的;
● 創建一個對象需要消耗的資源過多,如要訪問 IO 和數據庫等資源;
● 需要定義大量的靜態常量和靜態方法(如工具類)的環境,可以采用單例模式(當然,也可以直接聲明為 static 的方式)。
線程不安全實例:
解決辦法:
在 getSingleton 方法前加 synchronized 關鍵字,也可以在 getSingleton 方法內增加 synchronized 來實現。最優的辦法是如通用代碼那樣寫。
定義:
Define an interface for creating an object,but let subclasses decide whichclass to instantiate.Factory Method lets a class defer instantiation to subclasses.(定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。)
Product 為抽象產品類負責定義產品的共性,實現對事物最抽象的定義;Creator 為抽象創建類,也就是抽象工廠,具體如何創建產品類是由具體的實現工廠 ConcreteCreator 完成的。
具體工廠類代碼:
簡單工廠模式:
一個模塊僅需要一個工廠類,沒有必要把它產生出來,使用靜態的方法
多個工廠類:
每個人種(具體的產品類)都對應了一個創建者,每個創建者獨立負責創建對應的產品對象,非常符合單一職責原則
代替單例模式:
單例模式的核心要求就是在內存中只有一個對象,通過工廠方法模式也可以只在內存中生產一個對象
延遲初始化:
ProductFactory 負責產品類對象的創建工作,并且通過 prMap 變量產生一個緩存,對需要再次被重用的對象保留
使用場景:jdbc 連接數據庫,硬件訪問,降低對象的產生和銷毀
定義:
Provide an interface for creating families of related or dependent objectswithout specifying their concrete classes.(為創建一組相關或相互依賴的對象提供 一個接口,而且無須指定它們的具體類。)
抽象工廠類代碼:
使用場景:
一個對象族(或是一組沒有任何關系的對象)都有相同的約束。
涉及不同操作系統的時候,都可以考慮使用抽象工廠模式
定義:
Define the skeleton of an algorithm in an operation,deferring some stepstosubclasses.Template Method lets subclasses redefine certain steps of analgorithm without changing the algorithm's structure.(定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。)
AbstractClass 叫做抽象模板,它的方法分為兩類:
● 基本方法
基本方法也叫做基本操作,是由子類實現的方法,并且在模板方法被調用。
● 模板方法
可以有一個或幾個,一般是一個具體方法,也就是一個框架,實現對基本方法的調度,完成固定的邏輯。注意: 為了防止惡意的操作,一般模板方法都加上 final 關鍵字,不允許被覆寫。
具體模板:
ConcreteClass1 和 ConcreteClass2 屬于具體模板,實現父類所定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現
使用場景:
● 多個子類有公有的方法,并且邏輯基本相同時。
● 重要、復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由
各個子類實現。
● 重構時,模板方法模式是一個經常使用的模式,把相同的代碼抽取到父類中,然后通過鉤子函數(見“模板方法模式的擴展”)約束其行為。
五:建造者模式(Builder Pattern)
定義:
Separate the construction of a complex object from its representation sothat the same construction process can create different representations.(將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。)
● Product 產品類
通常是實現了模板方法模式,也就是有模板方法和基本方法,例子中的
BenzModel 和 BMWModel 就屬于產品類。
● Builder 抽象建造者
規范產品的組建,一般是由子類實現。例子中的 CarBuilder 就屬于抽象建造者。
● ConcreteBuilder 具體建造者
實現抽象類定義的所有方法,并且返回一個組建好的對象。例子中的 BenzBuilder和 BMWBuilder 就屬于具體建造者。
● Director 導演類
負責安排已有模塊的順序,然后告訴 Builder 開始建造
使用場景:
● 相同的方法,不同的執行順序,產生不同的事件結果時,可以采用建造者模式。
● 多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時,則可以使用該模式。
● 產品類非常復雜,或者產品類中的調用順序不同產生了不同的效能,這個時候使用建造者模式非常合適。
建造者模式與工廠模式的不同:
建造者模式最主要的功能是基本方法的調用順序安排,這些基本方法已經實現了,順序不同產生的對象也不同;工廠方法則重點是創建,創建零件是它的主要職責,組裝順序則不是它關心的。
由于篇幅的限制,沒有辦法把23種設計模式全部詳細的分享給大家,但是整理成了Pdf資料可以分享給大家,有需要此PDF文檔資料的可以找我領取,希望可以幫助到大家學習。
領取方式:關注我的供種號(Java周某人)即可
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。