java設(shè)計(jì)模式之適配器模式(Adapter)
概述
將一個(gè)類的接口轉(zhuǎn)換成用戶希望的另外一個(gè)接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。
兩種實(shí)現(xiàn)方式
1.類的適配器模式:
2.對(duì)象的適配器模式:
類的適配器模式的UML圖,如下:
類的適配器模式把適配的類的API轉(zhuǎn)換成為目標(biāo)類的API。
上圖設(shè)計(jì)的角色有:
目標(biāo)角色(Target):這就是所期待得到的接口。
源角色(Adapee):現(xiàn)在需要適配的接口。
適配器角色(Adapter):是本模式的核心,適配器把源接口轉(zhuǎn)換成目標(biāo)接口。
代碼示例:
interface Target{ void method1(); void method2(); //期待得到該方法 } //源類中不具備method2中的方法。 class Adaptee{ public void method1(){ System.out.println("method1"); } } class Adapter extends Adaptee implements Target{ @Override public void method2() { System.out.println("this is target method"); } } public class MainTest { public static void main(String arg[]) { Target target = new Adapter(); target.method2(); } }
對(duì)象的適配器模式的UMl圖,如下:
核心思路與類的適配器模式相同,只是將Adapter類修改,不繼承Adaptee類,而是持有Adaptee類的引用。代碼如下:
interface Target{ void method1(); void method2(); } class Adaptee{ public void method1(){ System.out.println("method1"); } } class Adapter implements Target{ private Adaptee adaptee; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } @Override public void method2() { System.out.println("this is target method"); } @Override public void method1() { // TODO Auto-generated method stub adaptee.method1(); } } public class MainTest { public static void main(String arg[]) { Target target = new Adapter(new Adaptee()); target.method2(); } }
適配器模式的優(yōu)缺點(diǎn):
更好的復(fù)用性,更好的擴(kuò)展性。系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要,那么通過(guò)適配器模式就可以讓這些功能得到更好的復(fù)用。在實(shí)現(xiàn)適配器功能的時(shí)候,可以調(diào)用自己開(kāi)發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能。
缺點(diǎn):過(guò)多的使用適配器,會(huì)讓系統(tǒng)非常凌亂,不易整體把握。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹
這篇文章主要介紹了Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03javaCV開(kāi)發(fā)詳解之收流器實(shí)現(xiàn)
這篇文章主要介紹了javaCV開(kāi)發(fā)詳解之收流器實(shí)現(xiàn),對(duì)javaCV有研究的同學(xué),可以參考下2021-04-04SpringBoot?表單提交全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式
這篇文章主要介紹了SpringBoot?表單提交全局日期格式轉(zhuǎn)換器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能
短信驗(yàn)證碼是通過(guò)發(fā)送驗(yàn)證碼到手機(jī)的一種有效的驗(yàn)證碼系統(tǒng)。主要用于驗(yàn)證用戶手機(jī)的合法性及敏感操作的身份驗(yàn)證。下面通過(guò)本文大家分享Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能,一起看看吧2017-08-08arthas?jprofiler做復(fù)雜鏈路的調(diào)用分析
這篇文章主要為大家介紹了arthas?jprofiler做復(fù)雜鏈路的調(diào)用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06SpringBoot @Async如何自定義線程池及使用教程
這篇文章主要介紹了SpringBoot @Async如何自定義線程池及使用教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01