欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

23種設(shè)計(jì)模式(5) java適配器模式

 更新時(shí)間:2017年11月09日 10:19:00   作者:阿木俠  
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java適配器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

23種設(shè)計(jì)模式第五篇:java適配器模式

定義:

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

角色:

目標(biāo)(Target)角色:這就是所期待得到的接口,也就是這類的接口是符合我們要求的。

源(Adapee)角色:我們要使用的接口,但是這個(gè)接口不符合我們的要求,也就是現(xiàn)在需要適配的接口。 

適配器(Adaper)角色:適配器類是適配器模式的核心。適配器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然,這一角色不可以是接口,而必須是具體類。 

分類:

1、類適配器模式

class Adaptee {     
  publicvoid specificRequest() {
     System.out.println("特殊請(qǐng)求,這個(gè)是源角色");
  }
}
/*這個(gè)是目標(biāo)角色,所期待的接口*/

interface Target {     
  publicvoid request();
}

現(xiàn)在想要實(shí)現(xiàn)這個(gè)Target接口,但是不想重構(gòu),想要用上已有的Adaptee類,這時(shí)可以定義一個(gè)適配器類,繼承想要使用的類,并且實(shí)現(xiàn)期待的接口。

class Adapter extends Adaptee implementsTarget{
     publicvoid request() {
          super.specificRequest();
     }
}

這樣,使用適配器類和實(shí)現(xiàn)目標(biāo)接口就完成了計(jì)劃,測(cè)試:

public class Test{
     publicstatic void main(String[] args) {
          //使用特殊功能類,即適配類
          Targetadapter = new Adapter();
          adapter.request();
     }
}

2、對(duì)象適配器模式

適配器類關(guān)聯(lián)已有的Adaptee類,并且實(shí)現(xiàn)標(biāo)準(zhǔn)接口,這樣做的好處是不再需要繼承。

class Adapter implements Target{
     privateAdaptee adaptee;

     publicAdapter (Adaptee adaptee) {
          this.adaptee= adaptee;
     }

     publicvoid request() {
          this.adaptee.specificRequest();
     }
}

我們可以想到,此時(shí)輸出結(jié)果和類適配器模式是相同的,測(cè)試:

public class Test{
     publicstatic void main(String[] args) {
          Targetadapter = new Adapter(new Adaptee());
          adapter.request();
     }
}

區(qū)別:

對(duì)象的適配器模式不是使用繼承關(guān)系連接到Adaptee類,而是使用委派關(guān)系連接到Adaptee類。 

優(yōu)點(diǎn): 

復(fù)用性

系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。那么通過適配器模式就可以讓這些功能得到更好的復(fù)用。 

擴(kuò)展性

在實(shí)現(xiàn)適配器功能的時(shí)候,可以自由調(diào)用自己開發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能。 

缺點(diǎn):

過多的使用適配器,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。比如,明明看到調(diào)用的是A接口,其實(shí)內(nèi)部被適配成了B接口的實(shí)現(xiàn)。所以適配器模式不適合在詳細(xì)設(shè)計(jì)階段使用它,它是一種補(bǔ)償模式,專用來在系統(tǒng)后期擴(kuò)展、修改時(shí)所用。 

適用場景: 

1、已經(jīng)存在的類的接口不符合我們的需求;
2、創(chuàng)建一個(gè)可以復(fù)用的類,使得該類可以與其他不相關(guān)的類或不可預(yù)見的類協(xié)同工作; 
3、使用一些已經(jīng)存在的子類而不需要對(duì)其進(jìn)行子類化來匹配接口。 
4、舊的系統(tǒng)開發(fā)的類已經(jīng)實(shí)現(xiàn)了一些功能,但是客戶端卻只能以另外接口的形式訪問,但我們不希望手動(dòng)更改原有類的時(shí)候。 

小結(jié): 

適配器模式不適合在詳細(xì)設(shè)計(jì)階段使用它,它是一種補(bǔ)償模式,專用來在系統(tǒng)后期擴(kuò)展、修改時(shí)所用,適配器模式更像是一種補(bǔ)救措施。

轉(zhuǎn)自:java知音

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Java快速實(shí)現(xiàn)一個(gè)簡單版的HashMap詳解

    基于Java快速實(shí)現(xiàn)一個(gè)簡單版的HashMap詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java簡單實(shí)現(xiàn)一個(gè)底層數(shù)據(jù)結(jié)構(gòu)為數(shù)組?+?鏈表的HashMap,不考慮鏈表長度超過8個(gè)時(shí)變?yōu)榧t黑樹的情況,需要的可以參考一下
    2023-02-02
  • 淺談Java中spring 線程異步執(zhí)行

    淺談Java中spring 線程異步執(zhí)行

    這篇文章主要介紹了淺談spring 線程異步執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java枚舉與.net枚舉區(qū)別詳解

    Java枚舉與.net枚舉區(qū)別詳解

    這篇文章主要介紹了Java枚舉與.net枚舉區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 國內(nèi)分布式框架Dubbo使用詳解

    國內(nèi)分布式框架Dubbo使用詳解

    這篇文章主要為大家介紹了國內(nèi)分布式框架Dubbo使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JAVA中取整數(shù)的4種方法總結(jié)

    JAVA中取整數(shù)的4種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于JAVA中取整數(shù)的4種方法,在java的Math類中,提供了許許多多的和數(shù)學(xué)計(jì)算有關(guān)的方法,其中也包括取整的,需要的朋友可以參考下
    2023-07-07
  • java查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼

    java查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨ava查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Maven指令打包SpringBoot項(xiàng)目提示沒有主清單文件問題

    Maven指令打包SpringBoot項(xiàng)目提示沒有主清單文件問題

    在Java開發(fā)中,打包Jar時(shí)常會(huì)遇到“沒有主清單屬性”的錯(cuò)誤,這通常是因?yàn)樵趐om.xml文件中沒有正確配置maven插件導(dǎo)致的,特別是在使用自定義的<parent/>節(jié)點(diǎn)而非spring-boot-starter-parent時(shí)
    2024-09-09
  • spring?boot微服務(wù)場景下apollo加載過程解析

    spring?boot微服務(wù)場景下apollo加載過程解析

    apollo?是一個(gè)開源的配置中心項(xiàng)目,功能很強(qiáng)大,apollo?本身的配置項(xiàng)并不復(fù)雜,但是因?yàn)榕渲玫穆窂教貏e多,非常容易搞混了,?所以本文試圖聚焦?spring-boot?的場景,在?spring-boot?微服務(wù)場景下,搞清楚?apollo-client的加載過程
    2022-02-02
  • java多線程模擬搶紅包功能

    java多線程模擬搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了java多線程模擬搶紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java工作隊(duì)列代碼詳解

    Java工作隊(duì)列代碼詳解

    這篇文章主要介紹了Java工作隊(duì)列代碼詳解,涉及Round-robin 轉(zhuǎn)發(fā),消息應(yīng)答(messageacknowledgments),消息持久化(Messagedurability)等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論