久久午夜无码,国产中文资源,Chinese熟女熟妇2乱2,高清五码d一区

當(dāng)前位置:首頁 > 前端設(shè)計(jì) > 正文

java常見設(shè)計(jì)模式及實(shí)現(xiàn) 三種設(shè)計(jì)模式結(jié)合的Java程序

java常見設(shè)計(jì)模式及實(shí)現(xiàn) 三種設(shè)計(jì)模式結(jié)合的Java程序

大家好,今天給各位分享java常見設(shè)計(jì)模式及實(shí)現(xiàn)的一些知識,其中也會對三種設(shè)計(jì)模式結(jié)合的Java程序進(jìn)行解釋,文章篇幅可能偏長,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)...

大家好,今天給各位分享java常見設(shè)計(jì)模式及實(shí)現(xiàn)的一些知識,其中也會對三種設(shè)計(jì)模式結(jié)合的Java程序進(jìn)行解釋,文章篇幅可能偏長,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在就馬上開始吧!

Java中使用了設(shè)計(jì)模式思想的類有哪些

說起來設(shè)計(jì)模式,我們每個人都不陌生,多多少少聽過「設(shè)計(jì)模式」的大名。

工作中,我們也一直提及到Java設(shè)計(jì)模式,那么我們的JDK中又有哪些常見的設(shè)計(jì)模式呢?

今天我們就來一起說一說。

說起Java設(shè)計(jì)模式,通俗一點(diǎn)就是前人的經(jīng)驗(yàn)總結(jié),經(jīng)由不斷演進(jìn),形成了一套場景結(jié)構(gòu)設(shè)計(jì)的一套解決方案。

Java設(shè)計(jì)模式共有23中涉及模式,總體分為:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式三類。

創(chuàng)建型模式

創(chuàng)建型模式的核心思想就是分裝隱藏創(chuàng)建對象的邏輯方式,不讓客戶端直接通過new創(chuàng)建新對象。該分類下包含:工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式共5種設(shè)計(jì)模式。

這里舉幾個例子:

工廠模式:java.util.Calendar#getInstance()

抽象工廠模式:DocumentBuilderFactory

單例模式:java.lang.Runtime#getRuntime()

建造者模式:StringBuilder

原型模式:Object.clone

結(jié)構(gòu)型模式

結(jié)構(gòu)型模式注重類與對象之間的組合,用組合的方式來替代繼承。該分類下包含:適配器模式、橋接模式、過濾器模式、組合模式、裝飾器模式、外觀模式、享元模式、代理模式共8中涉及模式。

這里舉典型的例子:

代理模式-java.lang.reflect.Proxy

享元模式:java.lang.Byte#valueOf(byte)

行為型模式

行為型模式關(guān)注的是對象之間的通訊交互,共有12中設(shè)計(jì)模式,責(zé)任鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態(tài)模式、空對象模式、策略模式、模版方法模式、訪問者模式。

舉個栗子:

迭代器模式:java.util.Iterator

觀察者模式:java.util.Observer

有人說設(shè)計(jì)模式是為了彌補(bǔ)Java語言的缺陷,你覺得是這樣嗎

看你從哪個層面來看待設(shè)計(jì)模式!

語言層面

如果你從語言層面來看設(shè)計(jì)模式,那么這個說法可以說是對的。有部分設(shè)計(jì)模式是彌補(bǔ)了Java語言上的不足,最明顯的就是單例模式。

在Java中本身沒有提供單例對象的創(chuàng)建,需要通過單例模式來實(shí)現(xiàn),什么餓漢式,懶漢式,多線程下還要關(guān)注DCL,volatile關(guān)鍵字等等,衍生了很多的面試題。

而在現(xiàn)代語言中,很多都提供了創(chuàng)建單例對象的語法,比如Scala,Kotlin的object關(guān)鍵字。

代碼設(shè)計(jì)層面

如果從代碼設(shè)計(jì)層面來看,設(shè)計(jì)模式提供了一套可復(fù)用的代碼結(jié)構(gòu),來解決特定問題。比如,當(dāng)需要動態(tài)化某些可選部分時,可以使用策略模式。當(dāng)需要一組操作來順序操作某個對象時,可以使用職責(zé)鏈模式。

架構(gòu)層面

從架構(gòu)層面來看,設(shè)計(jì)模式對組件關(guān)系進(jìn)行了解耦。

假設(shè)我們要實(shí)現(xiàn)一個文件服務(wù)器,有一個UploadService來進(jìn)行上傳操作,可以調(diào)用ConvertService對文件進(jìn)行轉(zhuǎn)換。UploadService屬于核心模塊「上傳模塊」,而ConvertService屬于非核心模塊「轉(zhuǎn)換模塊」。

如果UploadService直接去調(diào)用ConvertService來執(zhí)行轉(zhuǎn)換,那么核心模塊就依賴了非核心模塊。如下圖:

非核心模塊是相對不穩(wěn)定的,核心模塊是相對穩(wěn)定的。核心模塊依賴了非核心模塊會導(dǎo)致核心模塊也不穩(wěn)定。所以可以使用策略模式來解耦:

看箭頭的方向,現(xiàn)在轉(zhuǎn)換模塊依賴于上傳模塊,轉(zhuǎn)換模塊的變化不會影響上傳模塊。依賴方向改變了,這就是傳說中的「依賴倒置」!

java 23種設(shè)計(jì)模式,一般情況下,常用的有哪些啊

工廠模式,工廠方法模式,單例模式,外觀(Facade)模式,觀察者(Observer)模式,橋接(Bridge)模式都是比較常用的,不同的項(xiàng)目有不同的設(shè)計(jì)方向,可以參考的設(shè)計(jì)模式也不盡相同,沒有定數(shù),只是上面這幾個模式用的比較多一些。

JAVA為什么要學(xué)設(shè)計(jì)模式

設(shè)計(jì)模式可以理解為解決一些列問題的經(jīng)驗(yàn)套路,充分考慮了對應(yīng)場景的實(shí)現(xiàn)方式,擴(kuò)展性等,用好設(shè)計(jì)模式就像站在了巨人的肩膀上,而且不用你重復(fù)去創(chuàng)造,

spring框架涉及到的設(shè)計(jì)模式有哪些你如何評價(jià)

1.簡單工廠,比如說BeanFactory

2.單列模式,spring默認(rèn)創(chuàng)建的bean都是單列的

3.適配器模式,在springMVC中,SpringMVC中的適配器HandlerAdatper

4.代理模式,比如說AOP

5.模板模式,比如說jdbcTemplate,redisTemplate

這是個人在使用spring框架總結(jié)出來的設(shè)計(jì)模式,我覺得是有關(guān)于JAVA面向?qū)ο?大原則的問題

你們自己編寫的代碼中用到了多少設(shè)計(jì)模式

1、設(shè)計(jì)模式的六大原則

總原則:開閉原則(OpenClosePrinciple)

開閉原則就是說對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼,而是要擴(kuò)展原有代碼,實(shí)現(xiàn)一個熱插拔的效果。所以一句話概括就是:為了使程序的擴(kuò)展性好,易于維護(hù)和升級。想要達(dá)到這樣的效果,我們需要使用接口和抽象類等,后面的具體設(shè)計(jì)中我們會提到這點(diǎn)。

1)單一職責(zé)原則

不要存在多于一個導(dǎo)致類變更的原因,也就是說每個類應(yīng)該實(shí)現(xiàn)單一的職責(zé),如若不然,就應(yīng)該把類拆分。

2)里氏替換原則(LiskovSubstitutionPrinciple)

里氏代換原則(LiskovSubstitutionPrincipleLSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一。里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對“開-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開-閉”原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。

3)依賴倒轉(zhuǎn)原則(DependenceInversionPrinciple)

這個是開閉原則的基礎(chǔ),具體內(nèi)容:面向接口編程,依賴于抽象而不依賴于具體。寫代碼時用到具體類時,不與具體類交互,而與具體類的上層接口交互。

4)接口隔離原則(InterfaceSegregationPrinciple)

這個原則的意思是:每個接口中不存在子類用不到卻必須實(shí)現(xiàn)的方法,如果不然,就要將接口拆分。使用多個隔離的接口,比使用單個接口(多個接口方法集合到一個的接口)要好。

5)迪米特法則(最少知道原則)(DemeterPrinciple)

就是說:一個類對自己依賴的類知道的越少越好。也就是說無論被依賴的類多么復(fù)雜,都應(yīng)該將邏輯封裝在方法的內(nèi)部,通過public方法提供給外部。這樣當(dāng)被依賴的類變化時,才能最小的影響該類。

最少知道原則的另一個表達(dá)方式是:只與直接的朋友通信。類之間只要有耦合關(guān)系,就叫朋友關(guān)系。耦合分為依賴、關(guān)聯(lián)、聚合、組合等。我們稱出現(xiàn)為成員變量、方法參數(shù)、方法返回值中的類為直接朋友。局部變量、臨時變量則不是直接的朋友。我們要求陌生的類不要作為局部變量出現(xiàn)在類中。

6)合成復(fù)用原則(CompositeReusePrinciple)

原則是盡量首先使用合成/聚合的方式,而不是使用繼承。

2、常用模式簡析

1)單例模式

單例模式(SingletonPattern)是Java中最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實(shí)例化該類的對象。

2)工廠模式

工廠模式(FactoryPattern)是Java中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。

3)建造者模式(Builder)

建造者模式(BuilderPattern)使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。一個Builder類會一步一步構(gòu)造最終的對象。該Builder類是獨(dú)立于其他對象的。

4)適配器模式

適配器模式(AdapterPattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨(dú)立接口的功能。

這種模式涉及到一個單一的類,該類負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。舉個真實(shí)的例子,讀卡器是作為內(nèi)存卡和筆記本之間的適配器。您將內(nèi)存卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取內(nèi)存卡。

我們通過下面的實(shí)例來演示適配器模式的使用。其中,音頻播放器設(shè)備只能播放mp3文件,通過使用一個更高級的音頻播放器來播放vlc和mp4文件。

5)裝飾器模式

裝飾器模式(DecoratorPattern)允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個包裝。

這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

我們通過下面的實(shí)例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。

6)代理模式

在代理模式(ProxyPattern)中,一個類代表另一個類的功能。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,在代理模式中,我們創(chuàng)建具有現(xiàn)有對象的對象,以便向外界提供功能接口。

7)原型模式

原型模式(PrototypePattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。

這種模式是實(shí)現(xiàn)了一個原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆。當(dāng)直接創(chuàng)建對象的代價(jià)比較大時,則采用這種模式。例如,一個對象需要在一個高代價(jià)的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數(shù)據(jù)庫,以此來減少數(shù)據(jù)庫調(diào)用。

8)備忘錄模式

提供了一種可以恢復(fù)狀態(tài)的機(jī)制,實(shí)現(xiàn)了信息的封裝,使得用戶不需要關(guān)心狀態(tài)的保存細(xì)節(jié),不破壞封裝的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣可以在以后將對象恢復(fù)到原先保存的狀態(tài)。

9)觀察者模式

當(dāng)對象間存在一對多關(guān)系時,則使用觀察者模式(ObserverPattern)。比如,當(dāng)一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。

10)策略模式

在策略模式(StrategyPattern)中,一個類的行為或其算法可以在運(yùn)行時更改。這種類型的設(shè)計(jì)模式屬于行為型模式。在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的context對象。策略對象改變context對象的執(zhí)行算法。

3、總結(jié)設(shè)計(jì)模式(Designpattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的;設(shè)計(jì)模式使代碼編制真正工程化;設(shè)計(jì)模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。

關(guān)于java常見設(shè)計(jì)模式及實(shí)現(xiàn),三種設(shè)計(jì)模式結(jié)合的Java程序的介紹到此結(jié)束,希望對大家有所幫助。

精品区少妇| 国产又粗又猛又爽又黄的| 丁香五月加勒比| 亚洲精品国产乱码久久久久久| 麻豆国产无码精品| 国产私拍福利精品视频二区| 综合图区日韩图区| 国产一极黄毛片| 日韩精品第| 国产美女精品一区在线观看| 亚洲gV无码男同| 久久人妻av无码中文区四季| 国产精品精在线| 亚洲av无码专区国产不乱码| 蜜桃成人| 91精品人妻一区二区三区| 香蕉久久夜色精品升级完成| 日韩综合永久精品| 在线一区2区3区无码高清| 五月天国产高清无码| 久久国产精品亚色影院| 亚洲日韩av无码一区二区| 天天色天天拍| 免费观看黄色a三级片| 观看成人永久免费视频| 夜夜操青青操| 真实国产精品| (91)熟女)视频| 欧美日韩极品在线观看| 日产砖码砖专区| 亚洲成aⅴ人片| 久久久久久国产综合精品视频| 黄色在线免费| 在线观看中文字幕不卡有码| 农村人妻偷人在线| 免费人成在线观看播放国产| 青春草这里有精品| 欧日韩亚州欧洲无码| 人妻人人干人人爽| 中文字幕永久无码| 日韩一区二区精品久久高清|