电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

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

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

1和2是長(zhǎng)久之計(jì),但不能解決迫在眉睫的問題。請(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ì)象適配器模式,由于類適配器模式通過多重繼承對(duì)一個(gè)接口與另一個(gè)接口進(jìn)行匹配,而JAVA語言不支持多重繼承,也就是一個(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(通過在內(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方法來說,調(diào)用的就是Target的request() Target target = new Target(); target.request(); }}

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

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

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

其實(shí)用適配器模式也是無奈之舉,很有點(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ì)說英語,需要翻譯,用適配器模式完善代碼

//外籍中鋒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ù)防接口不同的問題,不匹配問題就不會(huì)發(fā)生:在有小的接口不統(tǒng)一問題發(fā)生時(shí),及時(shí)重構(gòu),問題不至于擴(kuò)大:只有碰到無法改變?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)文章:
主站蜘蛛池模板: 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | Duoguan 夺冠集团| 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 真空上料机(一种真空输送机)-百科 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 |