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

Java Adapter 適配器模式(類適配器,對(duì)象適配器)優(yōu)缺點(diǎn)對(duì)比

 更新時(shí)間:2016年12月15日 11:37:58   投稿:lqh  
這篇文章主要介紹了Java 適配器模式(類適配器,對(duì)象適配器)優(yōu)缺點(diǎn)對(duì)比的相關(guān)資料,java 適配器在基礎(chǔ)知識(shí)中還是比較重要的,這里就說(shuō)下如何使用,需要的朋友可以參考下

Java 適配器模式

           最近學(xué)習(xí)java 基礎(chǔ)知識(shí),學(xué)習(xí)適配器的時(shí)候疑惑很多,上網(wǎng)查下資料,對(duì)于 Adapter的資料很多,但是比較下本篇不錯(cuò),這里記錄下,大家需要的可以看下。

適配器模式就是把一個(gè)類的接口轉(zhuǎn)換成客戶端所期待的另外一種接口,從而使原接口不匹配而無(wú)法在一起工作的的兩個(gè)類能在一起工作。從功能上說(shuō),這些接口不兼容的類一般具有相同或相似的功能。通常我們通過(guò)修改該類的接口來(lái)解決這種接口不兼容的情形,但是如果我們不愿意為了一個(gè)應(yīng)用而修改各原接口,或者我們壓根兒就沒(méi)有對(duì)象的源代碼的時(shí)候,適配器模式就會(huì)派上用場(chǎng)了。

適配器的優(yōu)點(diǎn):

1、將目標(biāo)類和適配者類解耦

2、增加了類的透明性和復(fù)用性,將具體的實(shí)現(xiàn)封裝在適配者類中,對(duì)于客戶端類來(lái)說(shuō)是透明的,而且提高了適配者的復(fù)用性

3、靈活性和擴(kuò)展性都非常好,符合開閉原則

適配器所涉及的角色包括下面幾種:

目標(biāo)(Target):定義一個(gè)客戶端使用的特定接口。

客戶端(Client):使用目標(biāo)接口,與和目標(biāo)接口一致的對(duì)象合作。

被適配者(Adaptee):一個(gè)現(xiàn)存需要適配的接口。

適配器(Adapter):負(fù)責(zé)將Adaptee的接口轉(zhuǎn)換為Target的接口。適配器是一個(gè)具體的類,這是該模式的核心。

適配器分為類適配器和對(duì)象適配器兩種,下面將詳細(xì)講述。

類適配器

所謂類適配器,指的是適配器Adapter繼承我們的被適配者Adaptee,并實(shí)現(xiàn)目標(biāo)接口Target。由于Java中是單繼承,所以這個(gè)適配器僅僅只能服務(wù)于所繼承的被適配者Adaptee。代碼如下:

被適配者(Adaptee)

package com.bluemsun.classadapter;

public class Person {
  private int id;
  private String name;
  /**
   * person可以現(xiàn)在只能說(shuō)英語(yǔ)
   */
  public void sayEnglish(){
    System.out.println("Person can say english!");
  }
  
  /**
   * 省略setter,getter.
   */
}

目標(biāo)接口(Target)

package com.bluemsun.classadapter;

/**
 * 目標(biāo)要求person可以說(shuō)英語(yǔ),法語(yǔ),日語(yǔ).但是現(xiàn)在的person僅僅可以說(shuō)英語(yǔ)
 * @author Administrator
 *
 */
public interface Target_Person {
  void sayEnglish();
  void sayFrench();
  void sayJapanese();
}

適配器(Adapter)

package com.bluemsun.classadapter;

/**
 * 類適配器,因?yàn)槔^承了Person,而Java中只能單繼承,所以這個(gè)適配器只為person這一個(gè)類服務(wù)
 * 這個(gè)適配器就讓person類在不修改源碼的基礎(chǔ)上能實(shí)現(xiàn)目標(biāo)接口所指定的方法
 * @author Administrator
 *
 */
public class Adapter_Person extends Person implements Target_Person{

  @Override
  public void sayFrench() {
    System.out.println("Person can say French!");
  }

  @Override
  public void sayJapanese() {
    System.out.println("Person can say Japanese!");
  }
}

客戶端(Client)

package com.bluemsun.classadapter;

public class Test {
  public static void main(String[] args) {
    Target_Person person = new Adapter_Person();
    
    person.sayEnglish();
    person.sayFrench();
    person.sayJapanese();
  }
}

上面的幾段簡(jiǎn)單代碼演示了類適配器的作用。正如我們開始所言,這個(gè)適配器Adapter只能為Person這一個(gè)類所服務(wù)。這時(shí)候你可能會(huì)想,要是我所需要適配的類很多,是不是都需要為每一個(gè)需要適配的類寫一個(gè)Adapter?有沒(méi)有更加靈活的方式呢?答案是:有!就是我們下面所講的對(duì)象適配器。

對(duì)象適配器

所謂對(duì)象適配器,簡(jiǎn)單的說(shuō)就是適配器實(shí)現(xiàn)我們的目標(biāo)接口,但是并不繼承需要被適配的類。而是通過(guò)在適配器的構(gòu)造函數(shù)中將需要被適配的類傳遞進(jìn)來(lái)從而進(jìn)行適配。代碼如下:(Target,Adaptee同上)

適配器(Adapter)

package com.bluemsun.objectdapter;

import com.bluemsun.classadapter.Person;
import com.bluemsun.classadapter.Target_Person;

/**
 * 對(duì)象適配器,與類適配器不同的是:對(duì)象適配器可以適配多個(gè)源到目標(biāo)
 * @author Administrator
 *
 */
public class Adapter_Person implements Target_Person{  //僅僅實(shí)現(xiàn)目標(biāo)接口
  private Person person;
  
  //在構(gòu)造函數(shù)中將Adaptee類Person傳遞進(jìn)來(lái)
  public Adapter_Person(Person person){
    this.person = person;
  }

  //實(shí)現(xiàn)目標(biāo)接口中的sayEnglish()--調(diào)用Adaptee中的sayEnglish()
  @Override
  public void sayEnglish() {
    this.person.sayEnglish();
  }

  //實(shí)現(xiàn)接口中的其它方法
  @Override
  public void sayFrench() {
    System.out.println("person can say French!");
  }

  @Override
  public void sayJapanese() {
    System.out.println("person can say Japanese!");
  }
}

客戶端(Client)

package com.bluemsun.objectdapter;

import com.bluemsun.classadapter.Person;
import com.bluemsun.classadapter.Target_Person;

public class Test {
  public static void main(String[] args) {
    Target_Person person = new Adapter_Person(new Person());
    
    person.sayEnglish();
    person.sayFrench();
    person.sayJapanese();
  }
}

對(duì)象適配器可以適配多個(gè)帶適配的類。只需要你在Adapter的構(gòu)造方法中傳遞不同的帶適配的類即可。具有靈活性。

類適配器的優(yōu)點(diǎn):

1、由于適配器類是適配者類的子類,因此可以再適配器類中置換一些適配者的方法,使得適配器的靈活性更強(qiáng)。

類適配器的缺點(diǎn):

1、對(duì)于Java、C#等不支持多重繼承的語(yǔ)言,一次最多只能適配一個(gè)適配者類,而且目標(biāo)抽象類只能為接口,不能為類,其使用有一定的局限性,不能將一個(gè)適配者類和他的子類同時(shí)適配到目標(biāo)接口。

對(duì)象適配器的優(yōu)點(diǎn):

1、把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說(shuō),同一個(gè)適配器可以把適配者類和他的子類都適配到目標(biāo)接口。

對(duì)象適配器的缺點(diǎn):

1、與類適配器模式相比,要想置換適配者類的方法就不容易。

 感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式

    Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式

    這篇文章主要介紹了Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解Spring Cloud Alibaba Sidecar多語(yǔ)言微服務(wù)異構(gòu)

    詳解Spring Cloud Alibaba Sidecar多語(yǔ)言微服務(wù)異構(gòu)

    這篇文章主要介紹了詳解Spring Cloud Alibaba Sidecar多語(yǔ)言微服務(wù)異構(gòu),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    項(xiàng)目里面有用到用戶手機(jī)號(hào)注冊(cè)發(fā)短信功能,本文主要介紹了springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java Home變量的詳細(xì)配置操作步驟

    Java Home變量的詳細(xì)配置操作步驟

    用到Java項(xiàng)目的時(shí)候,有時(shí)候要用到Java_home,這個(gè)需要在系統(tǒng)配置中配置一下,如何操作呢?以下為詳細(xì)的圖文步驟,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • java中jar包的生成與使用方式

    java中jar包的生成與使用方式

    這篇文章主要介紹了java中jar包的生成與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot中創(chuàng)建的AOP不生效的原因及解決

    SpringBoot中創(chuàng)建的AOP不生效的原因及解決

    這篇文章主要介紹了SpringBoot中創(chuàng)建的AOP不生效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java雙色球系統(tǒng)開發(fā)詳解

    Java雙色球系統(tǒng)開發(fā)詳解

    這篇文章主要為大家詳細(xì)介紹了Java雙色球系統(tǒng)的開發(fā),超級(jí)簡(jiǎn)單的邏輯,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java關(guān)鍵字instanceof的兩種用法實(shí)例

    Java關(guān)鍵字instanceof的兩種用法實(shí)例

    這篇文章主要介紹了Java關(guān)鍵字instanceof的兩種用法實(shí)例,本文給出了instanceof關(guān)鍵字用于判斷一個(gè)引用類型變量所指向的對(duì)象是否是一個(gè)類(或接口、抽象類、父類)及用于數(shù)組比較,需要的朋友可以參考下
    2015-03-03
  • Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼

    Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼

    這篇文章主要介紹了Java中CountDownLatch進(jìn)行多線程同步詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • IDEA創(chuàng)建Servlet編寫HelloWorldServlet頁(yè)面詳細(xì)教程(圖文并茂)

    IDEA創(chuàng)建Servlet編寫HelloWorldServlet頁(yè)面詳細(xì)教程(圖文并茂)

    在學(xué)習(xí)servlet過(guò)程中參考的教程是用eclipse完成的,而我在練習(xí)的過(guò)程中是使用IDEA的,在創(chuàng)建servlet程序時(shí)遇到了挺多困難,在此記錄一下,這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Servlet編寫HelloWorldServlet頁(yè)面詳細(xì)教程的相關(guān)資料,需要的朋友可以參考下
    2023-10-10

最新評(píng)論