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