詳解Java適配器模式
假期剛結(jié)束不久,也沒(méi)什么好寫(xiě)的,今天就水下文章,講講設(shè)計(jì)模式對(duì)開(kāi)發(fā)時(shí)的影響,做開(kāi)發(fā)到現(xiàn)在,感覺(jué)設(shè)計(jì)模式對(duì)開(kāi)發(fā)的影響還是挺大的。
這次就簡(jiǎn)單談?wù)勥m配器模式??赡苓m配器模式感覺(jué)比較雞肋,但是用到的地方還挺多的,特別是合作開(kāi)發(fā)的時(shí)候。
1.適配器模式
適配器模式,作為連接兩個(gè)接口的橋梁。這個(gè)概念感覺(jué)有點(diǎn)那啥,很少用接口的朋友可能就沒(méi)有什么感覺(jué),經(jīng)常面向接口編程的朋友比較能產(chǎn)生共鳴,簡(jiǎn)單來(lái)說(shuō),就是寫(xiě)一個(gè)適配器(轉(zhuǎn)換器)來(lái)對(duì)接對(duì)象。
2.適配器模式使用
java適配器模式有兩種,類(lèi)適配器和對(duì)象適配器
(1)類(lèi)適配器demo
類(lèi)適配器主要是使用繼承的方式連接兩個(gè)接口。我們假設(shè)對(duì)接接口A和接口B。
先寫(xiě)接口B
public interface MP4{
void play();
}
接口B的實(shí)現(xiàn)類(lèi)
public class ExpensiveMP4 implement MP4{
public void play(){
// todo
}
}
接口A
public interface Player{
void action();
}
假如你的工程中有這幾個(gè)類(lèi),然后你發(fā)現(xiàn),action()方法中要寫(xiě)的操作,就是ExpensiveMP4的play()中的操作“//todo”,所以你沒(méi)必要重復(fù)再寫(xiě)一次,想個(gè)辦法讓他們適配。所以,你想讓外部調(diào)用Player的時(shí)候去調(diào)用ExpensiveMP4的play,如果用類(lèi)適配器的話可以這樣寫(xiě)
public class ExpensiveAdapter extends ExpensiveMP4 implement Player{
public void action(){
play();
}
}
這樣就把兩個(gè)接口連接起來(lái)了,不過(guò)我一般用不上類(lèi)適配器,感覺(jué)這樣的做法不太靈活,而且在java中,盡量少用繼承,多用組合。而且這種寫(xiě)法我覺(jué)得也不太舒服。
(2)對(duì)象適配器demo
上面的類(lèi)適配器用的是“繼承”的方式去連接,這里的對(duì)象適配器用的是“組合”的方式。我們假設(shè)對(duì)接接口A和接口B。就用上面的MP4接口,Player接口和ExpensiveMP4類(lèi)吧。
這時(shí)候我們使用對(duì)象適配器的話可以這樣寫(xiě)。
public class PlayerAdapter implement Player{
public ExpensiveMP4 expensiveMP4;
public PlayerAdapter (){
this.expensiveMP4 = new ExpensiveMP4();
}
public void action(){
if(expensiveMP4 != null){
expensiveMP4 .play();
}
}
}
感覺(jué)這樣好像不太靈活,expensiveMP4像死的一樣,毫無(wú)靈魂,好吧,我們改改。
public class PlayerAdapter implement Player{
public ExpensiveMP4 expensiveMP4;
public PlayerAdapter (ExpensiveMP4 expensiveMP4){
this.expensiveMP4 = expensiveMP4;
}
public void action(){
if(expensiveMP4 != null){
expensiveMP4 .play();
}
}
}
這樣就比剛才好多了,比剛才的代碼靈活多了,但是總感覺(jué)有點(diǎn)普通,我們要把代碼寫(xiě)得有點(diǎn)藝術(shù),抽象就是藝術(shù),好吧,再改改。
public class PlayerAdapter implement Player{
public MP4 mp4;
public PlayerAdapter (MP4 mp4){
this.mp4 = mp4;
}
public void action(){
if(mp4!= null){
mp4.play();
}
}
}
可能這樣看起來(lái)會(huì)比較好一點(diǎn)吧,比較容易看出如何適配兩個(gè)接口。
3.適配器模式的使用場(chǎng)景
(1)其中一個(gè)使用的場(chǎng)景是像上面所說(shuō)的一樣,有兩個(gè)接口,你主動(dòng)的想去連接著兩個(gè)接口,寫(xiě)個(gè)適配器,感覺(jué)這種情況也不是很多,因?yàn)楹芏鄷r(shí)候都是些一個(gè)實(shí)體類(lèi)對(duì)象調(diào)用另一個(gè)實(shí)體類(lèi)對(duì)象。
(2)被動(dòng)使用的情況,這種情況我可能見(jiàn)得比較多。舉個(gè)栗子,比較極端的栗子,你和你同伴一起合作開(kāi)發(fā),你同伴寫(xiě)一個(gè)部分,你寫(xiě)一個(gè)部分,現(xiàn)在兩個(gè)部分要對(duì)接。結(jié)過(guò)到對(duì)接時(shí),你們發(fā)現(xiàn)兩個(gè)人都自定義了接口,而且兩個(gè)人都開(kāi)發(fā)完了,都不想改,那怎么辦,只能寫(xiě)一個(gè)適配器去適配兩個(gè)接口。又或者說(shuō)你開(kāi)發(fā)新版本的時(shí)候重新定義了接口,要和舊版本寫(xiě)適配的時(shí)候,為了方便也可以使用適配器模式。
以上所述是小編給大家介紹的Java適配器模式詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
淺談Spring Boot 整合ActiveMQ的過(guò)程
本篇文章主要介紹了淺談Spring Boot 整合ActiveMQ的過(guò)程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
JavaFX實(shí)現(xiàn)UI美觀效果代碼實(shí)例
這篇文章主要介紹了JavaFX實(shí)現(xiàn)UI美觀效果代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot中實(shí)現(xiàn)分布式的Session共享的詳細(xì)教程
這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)分布式的Session共享,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Java基礎(chǔ)教程之類(lèi)數(shù)據(jù)與類(lèi)方法
這篇文章主要介紹了Java基礎(chǔ)教程之類(lèi)數(shù)據(jù)與類(lèi)方法,本文是對(duì)類(lèi)的深入探討,類(lèi)數(shù)據(jù)指類(lèi)的一些屬性、參數(shù)等,類(lèi)方法就是類(lèi)包含的功能方法,需要的朋友可以參考下2014-08-08
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身俱樂(lè)部管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+SSM+Mysql+Jsp開(kāi)發(fā)的健身俱樂(lè)部管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有俱樂(lè)部管理該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02

