日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

實(shí)例講解JAVA 適配器模式

瀏覽:21日期:2022-08-30 13:13:13

在講述這個(gè)模式之前,我們先看一個(gè)案例:中國(guó)球員去NBA打籃球

中國(guó)球員去NBA打籃球,可是他不懂英語(yǔ),所以聽不懂教練安排的戰(zhàn)術(shù),所以現(xiàn)在有三種解決方式

1、球員學(xué)會(huì)英語(yǔ)。2、教練學(xué)會(huì)中文。3、請(qǐng)個(gè)翻譯。

1和2是長(zhǎng)久之計(jì),但不能解決迫在眉睫的問(wèn)題。請(qǐng)個(gè)翻譯是短暫的更好的選擇。

放在軟件設(shè)計(jì)層面上,這就叫做適配器模式。https://www.jb51.net/article/189484.htm

將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

在軟件開發(fā)中,也就是系統(tǒng)的數(shù)據(jù)和行為都正確,但接口不符時(shí),我們應(yīng)該考慮用適配器,目的是使控制范圍之外的一個(gè)原有對(duì)象與某個(gè)接口匹配,適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況。

在 GoF 的設(shè)汁模式中,對(duì)適配器模式講了兩種類型,類適配器模式和對(duì)象適配器模式,由于類適配器模式通過(guò)多重繼承對(duì)一個(gè)接口與另一個(gè)接口進(jìn)行匹配,而JAVA語(yǔ)言不支持多重繼承,也就是一個(gè)類只有一個(gè)父類,所以我們這里主要講的是對(duì)象適配器。

Target(這是客戶所期待的接口。目標(biāo)可以是具體的或抽象的類,也可以是接口)代碼如下:

public class Target { public void request() { System.out.println('普通請(qǐng)求'); }}

Adaptee(需要適配的類)代碼如下:

public class Adaptee { public void specialRequest(){ System.out.println('特殊請(qǐng)求'); }}

Adapter(通過(guò)在內(nèi)部包裝一個(gè)Adaptee對(duì)象,把原接口轉(zhuǎn)換成目標(biāo)接口)代碼如下:

public class Adapter extends Target{ private Adaptee adaptee = new Adaptee();//建立一個(gè)私有的Adaptee對(duì)象 @Override public void request() { //這樣就可以把表面上調(diào)用request()方法變成實(shí)際調(diào)用的specialRequest() adaptee.specialRequest(); }}

測(cè)試方法

public class Test { public static void main(String[] args) { //對(duì)main方法來(lái)說(shuō),調(diào)用的就是Target的request() Target target = new Target(); target.request(); }}

看起來(lái)是不是很簡(jiǎn)單,是不是跟一句俗語(yǔ)很像“掛羊頭賣狗肉”。

何時(shí)使用適配器模式?

在想使用一個(gè)已經(jīng)存在的類,但如果它的接口,也就是它的方法和你的要求不相同時(shí),就應(yīng)該考慮用適配器模式。兩個(gè)類所做的事情相同或相似,但是具有不同的接口時(shí)要使用它。而且由于類都共亨同一個(gè)接口,代碼可以統(tǒng)一調(diào)用同一接口就行了,這樣應(yīng)該可以更簡(jiǎn)單、更直接、更緊湊。

其實(shí)用適配器模式也是無(wú)奈之舉,很有點(diǎn)‘亡羊補(bǔ)牢’的感覺,沒辦法呀,是軟件就有維護(hù)的一天,維護(hù)就有可能會(huì)因不同的開發(fā)人員、不同的產(chǎn)品、不同的廠家而造成功能類似而接口不同的情況,此時(shí)就是適配器模式大展拳腳的時(shí)候了。

現(xiàn)在把教練給球員們分配任務(wù)的例子用適配器模式實(shí)現(xiàn)

球員類

public abstract class Player { protected String name; public Player(String name) { this.name = name; } //進(jìn)攻和防守方法 public abstract void attack(); public abstract void defense();}

后衛(wèi)、中鋒、前鋒類

//前鋒public class Forwards extends Player { public Forwards(String name) { super(name); } @Override public void attack() { System.out.println('前鋒:'+name+'進(jìn)攻'); } @Override public void defense() { // TODO Auto-generated method stub System.out.println('前鋒:'+name+'防守'); }}//中鋒public class Center extends Player { public Center(String name) { super(name); } @Override public void attack() { System.out.println('中鋒:'+name+'進(jìn)攻'); } @Override public void defense() { // TODO Auto-generated method stub System.out.println('中鋒:'+name+'防守'); }}//后衛(wèi)public class Guards extends Player { public Guards(String name) { super(name); } @Override public void attack() { System.out.println('后衛(wèi):'+name+'進(jìn)攻'); } @Override public void defense() { // TODO Auto-generated method stub System.out.println('后衛(wèi):'+name+'防守'); }}

測(cè)試方法

public class Test { public static void main(String[] args) { Player peter = new Forwards('peter'); peter.attack(); Player mike = new Guards('mike'); mike.attack(); Player zhangsan = new Center('張三'); zhangsan.attack(); zhangsan.defense(); }}

輸出結(jié)果:

前鋒:peter進(jìn)攻后衛(wèi):mike進(jìn)攻中鋒:張三進(jìn)攻中鋒:張三防守

球員“張三”不會(huì)說(shuō)英語(yǔ),需要翻譯,用適配器模式完善代碼

//外籍中鋒public class ForeignCenter { private String name; //外籍中鋒只懂得中文“進(jìn)攻” public void jingong() { System.out.println('中鋒:'+name+'進(jìn)攻'); } //外籍中鋒只懂得中文“防守” public void fangshou() { System.out.println('中鋒:'+name+'防守'); } //省略getter、setter方法}

//翻譯者public class Translator extends Player { //聲明并實(shí)例化一個(gè)內(nèi)部“外籍中鋒”對(duì)象,表面翻譯者與外籍球員有關(guān)聯(lián) private ForeignCenter wjzf = new ForeignCenter(); public Translator(String name) { super(name); wjzf.setName(name); } @Override public void attack() { //翻譯者將attack翻譯為jingong 告訴外籍中鋒 wjzf.jingong(); } @Override public void defense() { //翻譯者將defense翻譯為fangshou 告訴外籍中鋒 wjzf.fangshou(); }}

main方法修改代碼如下:

//翻譯者public class Translator extends Player { //聲明并實(shí)例化一個(gè)內(nèi)部“外籍中鋒”對(duì)象,表面翻譯者與外籍球員有關(guān)聯(lián) private ForeignCenter wjzf = new ForeignCenter(); public Translator(String name) { super(name); wjzf.setName(name); } @Override public void attack() { //翻譯者將attack翻譯為jingong 告訴外籍中鋒 wjzf.jingong(); } @Override public void defense() { //翻譯者將defense翻譯為fangshou 告訴外籍中鋒 wjzf.fangshou(); }}

現(xiàn)在就算是張三不懂英文,教練不懂中文,但因?yàn)橛辛朔g者,團(tuán)隊(duì)溝通合作成為了可能。

如果能事先預(yù)防接口不同的問(wèn)題,不匹配問(wèn)題就不會(huì)發(fā)生:在有小的接口不統(tǒng)一問(wèn)題發(fā)生時(shí),及時(shí)重構(gòu),問(wèn)題不至于擴(kuò)大:只有碰到無(wú)法改變?cè)性O(shè)計(jì)和代碼的情況時(shí),才考慮適配。

事后控制不如事中控制,事中控制不如事前控制。

以上就是實(shí)例講解JAVA 適配器模式的詳細(xì)內(nèi)容,更多關(guān)于JAVA 適配器模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区观看| 日韩精品免费观看视频| 久久av免费| 精品精品99| 高清av不卡| 国产色综合网| 蜜臀a∨国产成人精品| 日韩不卡一区二区三区| 国产精品午夜av| 国产成人黄色| 美女久久一区| 午夜精品久久久久久久久久蜜桃| yellow在线观看网址| 精品久久久久久久| 成人黄色av| 日韩高清中文字幕一区二区| 国产高清久久| 日本一不卡视频| 国产成人精品一区二区三区免费| 米奇777超碰欧美日韩亚洲| 亚洲精品在线a| 国产成人精品一区二区三区视频| 欧美精选一区二区三区| 日韩福利视频一区| 国产不卡精品在线| 国产精品外国| 久久久久九九精品影院| 蜜桃tv一区二区三区| 日韩欧美中文字幕电影| 美女av一区| 欧美日韩视频一区二区三区| 日韩精品免费观看视频| 电影91久久久| 日韩中文字幕一区二区三区| 欧美成人一二区| 国产一区欧美| 欧美aⅴ一区二区三区视频| 午夜久久黄色| 老司机精品视频网| 免费看欧美美女黄的网站| 精品一区二区三区中文字幕| 在线亚洲精品| 成人国产精品久久| 婷婷亚洲成人| 91高清一区| 97人人精品| 日本中文字幕不卡| 99精品电影| 国产精品成人国产| 视频在线观看一区二区三区| 极品av在线| 国产精品乱战久久久| 亚洲欧美日韩在线观看a三区| 国产成年精品| 国产日韩三级| 中文无码日韩欧| 国产真实久久| 激情国产在线| 久久gogo国模啪啪裸体| 亚洲精品大全| 午夜在线观看免费一区| 国产精品99一区二区三| 日韩精品亚洲一区二区三区免费| 国产综合欧美| 伊伊综合在线| 久久不卡国产精品一区二区| 亚洲欧洲国产精品一区| 婷婷成人在线| 黄色在线观看www| 国产日韩在线观看视频| 首页国产欧美久久| 国产99精品| 午夜精品久久久久久久久久蜜桃| 免费日韩一区二区三区| 日本午夜免费一区二区| 另类国产ts人妖高潮视频| 夜鲁夜鲁夜鲁视频在线播放| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 乱一区二区av| 日本午夜精品| 日韩精品久久久久久| 亚洲一二av| 男女男精品网站| 国户精品久久久久久久久久久不卡 | 男人天堂欧美日韩| 亚洲一级黄色| 久久青草久久| 群体交乱之放荡娇妻一区二区| 国际精品欧美精品| 精品一级视频| av中文资源在线资源免费观看| 成人亚洲精品| 亚洲精品福利电影| 成人片免费看| 久久久人人人| 在线亚洲国产精品网站| 亚洲国产成人精品女人| 黄色成人91| 中文字幕日韩亚洲| 日本中文字幕一区二区视频| 亚洲精品伊人| 欧美日本久久| 精品深夜福利视频| 伊人久久在线| 国产韩日影视精品| 亚洲综合日本| 日本va欧美va精品发布| 国产精品嫩模av在线| 精品一区二区三区在线观看视频| 国产精品成人a在线观看| 亚洲国产福利| 欧美日韩在线播放视频| 国产亚洲欧洲| 91精品麻豆| 超碰成人av| 在线亚洲一区| 日韩高清在线不卡| 久久不卡日韩美女| 水蜜桃久久夜色精品一区| 免费福利视频一区二区三区| 亚洲国产综合在线看不卡| 午夜亚洲福利在线老司机| 日韩精品福利一区二区三区| 国产精品极品在线观看| 国产欧美一区二区三区精品酒店| 激情丁香综合| 国产免费成人| 欧美久久一区二区三区| 国产黄大片在线观看| 亚洲免费中文| 国产精品草草| 色老板在线视频一区二区| 亚洲中午字幕| 欧美国产视频| 国产精品av一区二区| 日韩黄色av| 日本午夜大片a在线观看| 在线综合亚洲| 国产精品99久久免费| 91精品国产成人观看| 日本不卡在线视频| 日韩国产欧美| 亚洲精品韩国| 日韩伦理在线一区| 视频国产精品| 成人日韩在线观看| 欧美日韩1区| 午夜视频精品| 动漫av一区| 少妇精品久久久一区二区| 国产精品二区不卡| 亚洲91网站| 亚州av乱码久久精品蜜桃| 国产精品一区二区三区av麻| 亚洲成人三区| 成人在线免费观看91| 亚洲香蕉视频| 久久婷婷av| 久久精品国产久精国产爱| 丝袜美腿亚洲色图| 香蕉成人av| 国产精品mm| 中文无码久久精品| 欧美sss在线视频| 国产欧美日韩免费观看| 日韩视频中文| se01亚洲视频 | 日韩精品一区二区三区中文| 91精品精品| 国产精品一级| 久久国产精品毛片| 成人福利av| 国产精品地址| 一二三区精品| 亚洲激情欧美| 成人美女视频| 麻豆一区在线| 91欧美极品| 亚洲理论在线| 欧美特黄a级高清免费大片a级| av在线资源| 精品亚洲a∨一区二区三区18| 日韩精品中文字幕一区二区| 午夜在线一区| 婷婷亚洲综合| 亚洲手机视频| 久久国产中文字幕| av资源亚洲| 日本欧美国产| 麻豆国产欧美日韩综合精品二区| 日韩欧美高清一区二区三区| 免费成人性网站| 中文在线一区| 99视频精品| 国产偷自视频区视频一区二区| 亚洲网站视频| 狠狠操综合网| 国产精品日本欧美一区二区三区| 激情欧美一区二区三区| 欧美男人天堂|