java設(shè)計(jì)模式之適配器模式(Adapter)
概述
將一個(gè)類的接口轉(zhuǎn)換成用戶希望的另外一個(gè)接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。
兩種實(shí)現(xiàn)方式
1.類的適配器模式:
2.對象的適配器模式:
類的適配器模式的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();
}
}
對象的適配器模式的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)的需要,那么通過適配器模式就可以讓這些功能得到更好的復(fù)用。在實(shí)現(xiàn)適配器功能的時(shí)候,可以調(diào)用自己開發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能。
缺點(diǎn):過多的使用適配器,會(huì)讓系統(tǒng)非常凌亂,不易整體把握。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成Swagger2實(shí)現(xiàn)Restful(類型轉(zhuǎn)換錯(cuò)誤解決辦法)
這篇文章主要介紹了SpringBoot集成Swagger2實(shí)現(xiàn)Restful(類型轉(zhuǎn)換錯(cuò)誤解決辦法),需要的朋友可以參考下2017-07-07
jdbc連SQL?server顯示1433端口連接失敗圖文解決方法
這篇文章主要給大家介紹了關(guān)于jdbc連SQL?server顯示1433端口連接失敗的圖文解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06
在Intellij Idea中使用jstl標(biāo)簽庫的方法
這篇文章主要介紹了在Intellij Idea中使用jstl標(biāo)簽庫的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05

