大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線(xiàn):400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 Java常用設(shè)計(jì)模式有多少種

Java常用設(shè)計(jì)模式有多少種

更新時(shí)間:2021-04-23 10:50:16 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1332次

設(shè)計(jì)模式的原則總結(jié)起來(lái),就是多用接口/抽象類(lèi),從而增加代碼的可擴(kuò)展性(減少修改代碼),降低模塊間的依賴(lài)和聯(lián)系,體現(xiàn)了OOP的模塊化、可擴(kuò)展性等特征。

1.工廠(chǎng)模式

工廠(chǎng)模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

Java工廠(chǎng)模式中,我們?cè)趧?chuàng)建對(duì)象時(shí)不會(huì)對(duì)客戶(hù)端暴露創(chuàng)建邏輯,并且是通過(guò)使用一個(gè)共同的接口來(lái)指向新創(chuàng)建的對(duì)象。

意圖:定義一個(gè)創(chuàng)建對(duì)象的接口,讓其子類(lèi)自己決定實(shí)例化哪一個(gè)工廠(chǎng)類(lèi),工廠(chǎng)模式使其創(chuàng)建過(guò)程延遲到子類(lèi)進(jìn)行。

主要解決:主要解決接口選擇的問(wèn)題。

何時(shí)使用:我們明確地計(jì)劃不同條件下創(chuàng)建不同實(shí)例時(shí)。

如何解決:讓其子類(lèi)實(shí)現(xiàn)工廠(chǎng)接口,返回的也是一個(gè)抽象的產(chǎn)品。

關(guān)鍵代碼:創(chuàng)建過(guò)程在其子類(lèi)執(zhí)行。

應(yīng)用實(shí)例:(1)您需要一輛汽車(chē),可以直接從工廠(chǎng)里面提貨,而不用去管這輛汽車(chē)是怎么做出來(lái)的,以及這個(gè)汽車(chē)?yán)锩娴木唧w實(shí)現(xiàn)。(2)Hibernate 換數(shù)據(jù)庫(kù)只需換方言和驅(qū)動(dòng)就可以。

優(yōu)點(diǎn):(1)一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱(chēng)就可以了。(2)擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠(chǎng)類(lèi)就可以。(3)屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。

缺點(diǎn):每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類(lèi)和對(duì)象實(shí)現(xiàn)工廠(chǎng),使得系統(tǒng)中類(lèi)的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類(lèi)的依賴(lài)。這并不是什么好事。

注意事項(xiàng):作為一種創(chuàng)建類(lèi)模式,在任何需要生成復(fù)雜對(duì)象的地方,都可以使用工廠(chǎng)方法模式。有一點(diǎn)需要注意的地方就是復(fù)雜對(duì)象適合使用工廠(chǎng)模式,而簡(jiǎn)單對(duì)象,特別是只需要通過(guò) new 就可以完成創(chuàng)建的對(duì)象,無(wú)需使用工廠(chǎng)模式。如果使用工廠(chǎng)模式,就需要引入一個(gè)工廠(chǎng)類(lèi),會(huì)增加系統(tǒng)的復(fù)雜度。

2.抽象工廠(chǎng)模式

抽象工廠(chǎng)模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠(chǎng)創(chuàng)建其他工廠(chǎng)。該超級(jí)工廠(chǎng)又稱(chēng)為其他工廠(chǎng)的工廠(chǎng)。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

在抽象工廠(chǎng)模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠(chǎng),不需要顯式指定它們的類(lèi)。每個(gè)生成的工廠(chǎng)都能按照工廠(chǎng)模式提供對(duì)象。

意圖:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,而無(wú)需指定它們具體的類(lèi)。

主要解決:主要解決接口選擇的問(wèn)題。

何時(shí)使用:系統(tǒng)的產(chǎn)品有多于一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其中某一族的產(chǎn)品。

如何解決:在一個(gè)產(chǎn)品族里面,定義多個(gè)產(chǎn)品。

關(guān)鍵代碼:在一個(gè)工廠(chǎng)里聚合多個(gè)同類(lèi)產(chǎn)品。

應(yīng)用實(shí)例:工作了,為了參加一些聚會(huì),肯定有兩套或多套衣服吧,比如說(shuō)有商務(wù)裝(成套,一系列具體產(chǎn)品)、時(shí)尚裝(成套,一系列具體產(chǎn)品),甚至對(duì)于一個(gè)家庭來(lái)說(shuō),可能有商務(wù)女裝、商務(wù)男裝、時(shí)尚女裝、時(shí)尚男裝,這些也都是成套的,即一系列具體產(chǎn)品。假設(shè)一種情況(現(xiàn)實(shí)中是不存在的,要不然,沒(méi)法進(jìn)入共產(chǎn)主義了,但有利于說(shuō)明抽象工廠(chǎng)模式),在您的家中,某一個(gè)衣柜(具體工廠(chǎng))只能存放某一種這樣的衣服(成套,一系列具體產(chǎn)品),每次拿這種成套的衣服時(shí)也自然要從這個(gè)衣柜中取出了。用 OO 的思想去理解,所有的衣柜(具體工廠(chǎng))都是衣柜類(lèi)的(抽象工廠(chǎng))某一個(gè),而每一件成套的衣服又包括具體的上衣(某一具體產(chǎn)品),褲子(某一具體產(chǎn)品),這些具體的上衣其實(shí)也都是上衣(抽象產(chǎn)品),具體的褲子也都是褲子(另一個(gè)抽象產(chǎn)品)。

優(yōu)點(diǎn):當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶(hù)端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。

缺點(diǎn):產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼。

使用場(chǎng)景:(1)QQ 換皮膚,一整套一起換。(2)生成不同操作系統(tǒng)的程序。

注意事項(xiàng):產(chǎn)品族難擴(kuò)展,產(chǎn)品等級(jí)易擴(kuò)展。

3.單例模式

單例模式(Singleton Pattern)是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

這種Java單例模式涉及到一個(gè)單一的類(lèi),該類(lèi)負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類(lèi)提供了一種訪(fǎng)問(wèn)其唯一的對(duì)象的方式,可以直接訪(fǎng)問(wèn),不需要實(shí)例化該類(lèi)的對(duì)象。

注意:

(1)單例類(lèi)只能有一個(gè)實(shí)例。

(2)單例類(lèi)必須自己創(chuàng)建自己的唯一實(shí)例。

(3)單例類(lèi)必須給所有其他對(duì)象提供這一實(shí)例。

主要解決:一個(gè)全局使用的類(lèi)頻繁地創(chuàng)建與銷(xiāo)毀。

如何解決:判斷系統(tǒng)是否已經(jīng)有這個(gè)單例,如果有則返回,如果沒(méi)有則創(chuàng)建。

關(guān)鍵代碼:構(gòu)造函數(shù)是私有的。

單例設(shè)計(jì)模式一般有幾種實(shí)現(xiàn)形式,餓漢式,飽漢式,雙重加鎖式。

應(yīng)用:數(shù)據(jù)庫(kù)連接池。因?yàn)閿?shù)據(jù)庫(kù)連接池是一種數(shù)據(jù)庫(kù)資源,使用數(shù)據(jù)庫(kù)連接池的主要是為了節(jié)省打開(kāi)或者關(guān)閉數(shù)據(jù)庫(kù)連接所造成的效率損耗,這種效率上的損耗還是非常昂貴的,使用單例設(shè)計(jì)模式可以大大降低這種損耗。

多線(xiàn)程中線(xiàn)程池的設(shè)計(jì)一般也采用單例設(shè)計(jì)模式,這是由于線(xiàn)程池要方便對(duì)池中的線(xiàn)程進(jìn)行控制。

網(wǎng)站中訪(fǎng)問(wèn)計(jì)數(shù)器,一般也是采用單例設(shè)計(jì)模式實(shí)現(xiàn)的,否則難以同步。

4.代理模式

Java代理模式在Java中十分常見(jiàn),主要用于業(yè)務(wù)邏輯的接口不希望被客戶(hù)端調(diào)用。有如Spring實(shí)現(xiàn)AOP而使用動(dòng)態(tài)代理

定義:給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用。

(1)靜態(tài)代理

靜態(tài)代理比較簡(jiǎn)單,是由程序員編寫(xiě)的代理類(lèi),并在程序運(yùn)行前就編譯好的,而不是由程序動(dòng)態(tài)產(chǎn)生代理類(lèi),這就是所謂的靜態(tài)。考慮這樣的場(chǎng)景,管理員在網(wǎng)站上執(zhí)行操作,在生成操作結(jié)果的同時(shí)需要記錄操作日志,這是很常見(jiàn)的。

(2)動(dòng)態(tài)代理

JDK動(dòng)態(tài)代理:

1)定義一個(gè)事件管理器類(lèi)實(shí)現(xiàn)invocationHandle接口,并重寫(xiě)invoke(代理類(lèi),被代理的方法,方法的參數(shù)列表)方法。

2)實(shí)現(xiàn)被代理類(lèi)及其實(shí)現(xiàn)的接口,

3)調(diào)用Proxy.newProxyInstance(類(lèi)加載器,類(lèi)實(shí)現(xiàn)的接口,事務(wù)處理器對(duì)象);生成一個(gè)代理實(shí)例。

4)通過(guò)該代理實(shí)例調(diào)用方法。

cglib動(dòng)態(tài)代理:通過(guò)“繼承”可以繼承父類(lèi)所有的公開(kāi)方法,然后可以重寫(xiě)這些方法,在重寫(xiě)時(shí)對(duì)這些方法增強(qiáng),這就是cglib的思想。

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的“Java常用設(shè)計(jì)模式有多少種”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為您服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩社区| 美国毛片一级视频在线aa | 伊人中文字幕在线观看 | 亚洲男人天堂视频 | 青草久久网 | 久久毛片久久毛 | 日韩欧美a级高清毛片 | 一级毛片无毒不卡直接观看 | 国产综合成人久久大片91 | 久久毛片免费看一区二区三区 | 波多野结衣一区免费作品 | 毛片免费全部免费观看 | 成人亚洲在线观看 | 亚洲精品中文字幕一区在线 | 伊人久久综合影院 | 国产老熟| 日韩亚洲国产综合久久久 | 狠狠艹| 四虎影视库| 国产高清在线精品一区免费97 | 欧美日韩影视 | 伊人在线 | 日韩欧美精品综合一区二区三区 | 毛片大片 | 精品国产成人系列 | 久久夜靖品 | 午夜精品久久久 | 青青青青青国产免费观看 | 日本黄色小视频在线观看 | 欧美一级成人免费大片 | 欧美毛片网站 | 欧美日韩在线播一区二区三区 | 四虎影院新网址 | 欧美性一区二区三区 | 久久这里只有精品23 | 免费两性的视频网站 | 国产精品成 | 91亚洲精品一区二区自 | 日本中文字幕一区二区 | 欧美深度肠交惨叫 | 亚洲国产精品不卡毛片a在线 |