一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Adapter 適配器模式(類適配器,對象適配器)優缺點對比

Java Adapter 適配器模式(類適配器,對象適配器)優缺點對比

2020-07-14 17:48java教程網 Java教程

這篇文章主要介紹了Java 適配器模式(類適配器,對象適配器)優缺點對比的相關資料,java 適配器在基礎知識中還是比較重要的,這里就說下如何使用,需要的朋友可以參考下

Java 適配器模式

           最近學習java 基礎知識,學習適配器的時候疑惑很多,上網查下資料,對于 Adapter的資料很多,但是比較下本篇不錯,這里記錄下,大家需要的可以看下。

適配器模式就是把一個類的接口轉換成客戶端所期待的另外一種接口,從而使原接口不匹配而無法在一起工作的的兩個類能在一起工作。從功能上說,這些接口不兼容的類一般具有相同或相似的功能。通常我們通過修改該類的接口來解決這種接口不兼容的情形,但是如果我們不愿意為了一個應用而修改各原接口,或者我們壓根兒就沒有對象的源代碼的時候,適配器模式就會派上用場了。

適配器的優點:

1、將目標類和適配者類解耦

2、增加了類的透明性和復用性,將具體的實現封裝在適配者類中,對于客戶端類來說是透明的,而且提高了適配者的復用性

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

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

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

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

被適配者(Adaptee):一個現存需要適配的接口。

適配器(Adapter):負責將Adaptee的接口轉換為Target的接口。適配器是一個具體的類,這是該模式的核心

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

類適配器

所謂類適配器,指的是適配器Adapter繼承我們的被適配者Adaptee,并實現目標接口Target。由于Java中是單繼承,所以這個適配器僅僅只能服務于所繼承的被適配者Adaptee。代碼如下:

被適配者(Adaptee)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.bluemsun.classadapter;
 
public class Person {
  private int id;
  private String name;
  /**
   * person可以現在只能說英語
   */
  public void sayEnglish(){
    System.out.println("Person can say english!");
  }
  
  /**
   * 省略setter,getter.
   */
}

目標接口(Target)

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.bluemsun.classadapter;
 
/**
 * 目標要求person可以說英語,法語,日語.但是現在的person僅僅可以說英語
 * @author Administrator
 *
 */
public interface Target_Person {
  void sayEnglish();
  void sayFrench();
  void sayJapanese();
}

適配器(Adapter)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.bluemsun.classadapter;
 
/**
 * 類適配器,因為繼承了Person,而Java中只能單繼承,所以這個適配器只為person這一個類服務
 * 這個適配器就讓person類在不修改源碼的基礎上能實現目標接口所指定的方法
 * @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)

?
1
2
3
4
5
6
7
8
9
10
11
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();
  }
}

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

對象適配器

所謂對象適配器,簡單的說就是適配器實現我們的目標接口,但是并不繼承需要被適配的類。而是通過在適配器的構造函數中將需要被適配的類傳遞進來從而進行適配。代碼如下:(Target,Adaptee同上)

適配器(Adapter)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.bluemsun.objectdapter;
 
import com.bluemsun.classadapter.Person;
import com.bluemsun.classadapter.Target_Person;
 
/**
 * 對象適配器,與類適配器不同的是:對象適配器可以適配多個源到目標
 * @author Administrator
 *
 */
public class Adapter_Person implements Target_Person{  //僅僅實現目標接口
  private Person person;
  
  //在構造函數中將Adaptee類Person傳遞進來
  public Adapter_Person(Person person){
    this.person = person;
  }
 
  //實現目標接口中的sayEnglish()--調用Adaptee中的sayEnglish()
  @Override
  public void sayEnglish() {
    this.person.sayEnglish();
  }
 
  //實現接口中的其它方法
  @Override
  public void sayFrench() {
    System.out.println("person can say French!");
  }
 
  @Override
  public void sayJapanese() {
    System.out.println("person can say Japanese!");
  }
}

客戶端(Client)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
  }
}

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

類適配器的優點:

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

類適配器的缺點:

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

對象適配器的優點:

1、把多個不同的適配者適配到同一個目標,也就是說,同一個適配器可以把適配者類和他的子類都適配到目標接口。

對象適配器的缺點:

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

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

原文鏈接:http://www.cnblogs.com/zhouxuanyu/p/4572280.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 羞羞私人影院可以直接免费观影吗 | 久久免费看少妇高潮A片JA | 91免费精品国自产拍在线可以看 | 国产激情久久久久影院小草 | 免费91麻豆精品国产自产在线观看 | 精品在线播放 | 国产在线观看一区 | 国产yw193.㎝m在线观看 | 亚洲国产欧美另类va在线观看 | 丝瓜秋葵番茄绿巨人在线观看 | 成人午夜爽爽爽免费视频 | 五月色天在线视频综合观看 | 色婷婷久久综合中文久久一本 | 嫩草在线观看视频 | 亚洲男人的天堂成人 | 色倩网站 | 国产高清久久 | 精品牛牛影视久久精品 | 色99视频| 高清不卡免费一区二区三区 | 亚洲欧美日韩综合一区久久 | 国亚洲欧美日韩精品 | 国产精品对白刺激久久久 | 亚洲激情综合 | 男女xxoo做爰猛烈动态一 | 色淫影院 | 国产精品久久久久久久久免费 | 热久久最新 | 色天天综合网色鬼综合 | 韩国一区二区三区 | 九九精品免视看国产成人 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 国产成人欧美视频在线 | narutotsunade全彩雏田 | 青草社区视频 | julia ann一hd| 草莓绿巨人香蕉茄子芭乐 | 石原莉奈被店长侵犯免费 | 小柔的性放荡羞辱日记动漫 | 男人都懂www深夜免费网站 |