1. 程式人生 > >Java設計模式----介面卡模式

Java設計模式----介面卡模式

1. 介面卡模式簡介

     介面卡模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面。Adapter 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

     適用場景:

     1、已經存在的類的介面不符合我們的需求;
     2、建立一個可以複用的類,使得該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作;

     3、在不對每一個都進行子類化以匹配它們的介面的情況下,使用一些已經存在的子類。

     其實現方式主要有兩種:

     1.類的介面卡模式(採用繼承實現)

     2.物件介面卡(採用物件組合方式實現)

2. 類介面卡

      我們生活中常常聽到的是電源介面卡,它是用於電流變換(整流)的裝置。介面卡的存在,就是為了將已存在的東西(介面)轉換成適合我們的需要、能被我們所利用。在現實生活中,介面卡更多的是作為一箇中間層來實現這種轉換作用。

    其中:
    • Target
     — 定義Client使用的與特定領域相關的介面。
    • Client
     — 與符合Target介面的物件協同。
    • Adaptee
     — 定義一個已經存在的介面,這個介面需要適配。
    • Adapter
     — 對Adaptee的介面與Target介面進行適配

     在上面的通用類圖中,Cient 類最終面對的是 Target 介面(或抽象類),它只能夠使用符合這一目標標準的子類;而 Adaptee 類則是被適配的物件(也稱 源角色),因為它包含specific (特殊的)操作、功能等,所以我們想要在自己的系統中使用它,將其轉換成符合我們標準的類,使得 Client 類可以在透明的情況下任意選擇使用 ConcreteTarget 類或是具有特殊功能的 Adatee 類。

     程式碼實現如下:

// 已存在的、具有特殊功能、但不符合我們既有的標準介面的類
class Adaptee {
	public void specificRequest() {
		System.out.println("被適配類具有 特殊功能...");
	}
}


// 目標介面,或稱為標準介面
interface Target {
	public void request();
}

// 具體目標類,只提供普通功能
class ConcreteTarget implements Target {
	public void request() {
		System.out.println("普通類 具有 普通功能...");
	}
} 


// 介面卡類,繼承了被適配類,同時實現標準介面
class Adapter extends Adaptee implements Target{
	public void request() {
		super.specificRequest();
	}
} 


// 測試類
public class Client {
	public static void main(String[] args) {
		// 使用普通功能類
		Target concreteTarget = new ConcreteTarget();
		concreteTarget.request();
		
		// 使用特殊功能類,即適配類
		Target adapter = new Adapter();
		adapter.request();
	}
}
測試結果:
普通類 具有 普通功能...
被適配類具有 特殊功能...

     上面這種實現的介面卡稱為類介面卡,因為 Adapter 類既繼承了 Adaptee (被適配類),也實現了 Target 介面(因為 Java 不支援多繼承,所以這樣來實現),在 Client 類中我們可以根據需要選擇並建立任一種符合需求的子類,來實現具體功能。

3. 物件介面卡

     另外一種介面卡模式是物件介面卡,它不是使用多繼承或繼承再實現的方式,而是使用直接關聯,或者稱為委託的方式,類圖如下:

      程式碼實現如下:

// 介面卡類,直接關聯被適配類,同時實現標準介面
class Adapter implements Target{
	// 直接關聯被適配類
	private Adaptee adaptee;
	
	// 可以通過建構函式傳入具體需要適配的被適配類物件
	public Adapter (Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	
	public void request() {
		// 這裡是使用委託的方式完成特殊功能
		this.adaptee.specificRequest();
	}
}


// 測試類
public class Client {
	public static void main(String[] args) {
		// 使用普通功能類
		Target concreteTarget = new ConcreteTarget();
		concreteTarget.request();
		
		// 使用特殊功能類,即適配類,
		// 需要先建立一個被適配類的物件作為引數
		Target adapter = new Adapter(new Adaptee());
		adapter.request();
	}
}
       測試結果與上面的一致。從類圖中我們也知道需要修改的只不過就是 Adapter 類的內部結構,即 Adapter 自身必須先擁有一個被適配類的物件,再把具體的特殊功能委託給這個物件來實現。使用物件介面卡模式,可以使得 Adapter 類(適配類)根據傳入的 Adaptee 物件達到適配多個不同被適配類的功能,當然,此時我們可以為多個被適配類提取出一個介面或抽象類。這樣看起來的話,似乎物件介面卡模式更加靈活一點。

4. 小結

      1、介面卡模式也是一種包裝模式,與之前的 Decorator 裝飾模式同樣具有包裝的功能;此外,物件介面卡模式還具有顯式委託的意思在裡面(其實類介面卡也有這種意思,只不過比較隱含而已),那麼我在認為它與 Proxy 代理模式也有點類似;

      2、從上面一點對比來看, Decorator 、 Proxy、 Adapter 在實現了自身的最主要目的(這個得看各個模式的最初動機、描述)之外,都可以在包裝的前後進行額外的、特殊的功能上的增減,因為我認為它們都有委託的實現意思在裡面;

      3、我所看的書中說介面卡模式不適合在詳細設計階段使用它,它是一種補償模式,專用來在系統後期擴充套件、修改時所用。


相關推薦

Java設計模式 介面卡模式

轉載自:https://www.cnblogs.com/V1haoge/p/6479118.html   感謝原作者! 介面卡就是一種適配中介軟體,它存在於不匹配的二者之間,用於連線二者,將不匹配變得匹配,簡單點理解就是平常所見的轉接頭,轉換器之類的存在。 介面卡有以下三

重走Java設計模式——介面卡模式(Adapter Pattern)

介面卡模式 定義 一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。 結構詳解 介面卡模式有類的介面卡模式和物件的介面卡模式兩種不同的形式。

淺談Java設計模式——介面卡模式(Adapter)

一、概述         將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。在我們的應用程式中我們可能需要將兩個不同介面的類來進行通訊,在不修改這兩個的前提下我們可能會需要某個中介軟體來完成這個銜接的過程

Java設計模式——介面卡模式

設計目的: 使舊介面相容新介面,不改或少改原業務程式碼 使用場景: 公司系統框架上有一個介面A,程式設計師為了實現業務,建立一個實現了介面A的類並且在業務程式碼上大量使用介面A提供的方法。過了幾個月,公司由於某種原因,要求放棄舊介面A,改用新介面B,但是舊介面

設計模式——介面卡模式 Java原始碼

前言 《Head First Design Patterns》給的程式碼的例子是關於鴨子和火雞,然而鴨子和火雞離日常生活比較遠。這次,我改編了實驗樓網站上面的例子,關於插座和充電器。 圖:不同國家的插座,插頭不一樣,呵呵噠 圖:所以需要寫一個介面卡

【本人禿頂程式設計師】Java設計模式-介面卡模式

←←←←←←←←←←←← 快,點關注! 介面卡模式(Adapter Pattern):將一個介面轉換成呼叫者希望的另一個介面,使介面不相容的那些類可以一起工作,其別名為包裝類(Wrapper),該模式可以作為類結構型模式,也可以作為物件結構型模式 介面卡模式應該是 Android 開

Java設計模式----介面卡模式

1. 介面卡模式簡介      介面卡模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面。Adapter 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。      適用場景:      1、已經存在的類的介面不符合我們的需求;      2、

Java設計模式 —— 介面卡模式(Adapter)

ADAPTER—在朋友聚會上碰到了一個美女Sarah,從香港來的,可我不會說粵語,她不會說普通話,只好求助於我的朋友kent了,他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了(也不知道他會不會耍我) 介面卡(變壓器)模式:把一個類的介面變換成客戶

JAVA的23種設計模式---介面卡模式

概要: 該文章參考了《設計模式之禪》一書及一些前輩的部落格文章 1.該文章闡述了介面卡模式的基礎原理及示例程式碼; 2.該文章適合初學設計模式的技術人員研習; 3.該文章有許多不足之處,請各位大咖指正,噴子繞道; 正文: 介面卡模式(變壓器模式、包裝

Headfirst java設計模式-介面卡模式

介面卡模式:將一個類的介面,轉換為客戶期望的另一個類的介面。介面卡讓原本不相容的類可以合作無間。 介面卡分為兩種: 1.物件介面卡:採用組合的方式,將請求傳送給被適配者。 2.類介面卡:繼承被適配者和目標類。 介面卡和外觀模式都可以針對多個類,他們的區別

23種設計模式---介面卡模式

package com.bjpowernode.demo03; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inpu

1. Java模式(介面卡模式)

今天看了下Java中的介面卡模式,以下就來小做下總結和談談感想,以便日後使用。 首先,先來先講講介面卡。適配就是由“源”到“目標”的適配,而當中連結兩者的關係就是介面卡。它負責把“源”過度到“目標”。舉個簡單的例子,比如有一個“源”是一個物件人,他擁有2種技能分別是說日語和說英語,而某個崗位

android設計模式——介面卡模式

    定義:介面卡模式就是把一個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配的而無法工作的兩個類能夠一起工作 使用場景: 系統要使用現有的類,但此類的介面不符合系統的需要,即介面不相容。 想要建立一個可以重複使用的類,用於與一些彼此之

設計模式——介面卡模式和外觀模式

介面卡模式和外觀模式 本文將分別介紹介面卡模式和外觀模式。 1、介面卡模式 1.1、定義 介面卡模式 將一個類的介面,轉換成客戶期望的另一個介面。介面卡讓原本介面不相容的類可以合作無間。 介面卡模式的定義非常易懂,就是將一個介面轉換成另一個介面,這樣一來就實現了介面的

Java 設計---Proxy 代理模式

何謂代理模式        代理模式是指客戶端不直接呼叫服務物件,而是通過代理服務去呼叫物件。 應用場景          1.當需要為一個物件在不同的地址空間提供區域性的代表時;此時的代理模式

設計模式 --- 介面卡模式

1.定義 介面卡模式把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。   2.使用場景 1.系統需要使用現有的類,而此類的介面不符合系統的要求,即介面不相容。 2.想要建立一個可以重複使用的類,用於與一些彼此之

設計模式-介面卡模式(Adapter)

概述 定義 : 將一個類的介面轉換成客戶期望的另一個介面 使原本不相容的類可以一起工作 型別 : 結構型 適用場景 已經存在的類, 它的方法和需求不匹配時(方法結果相同或相似) 不是軟體設計階段考慮的設計模式, 而是隨著軟體

設計模式--------介面卡模式

介面卡模式有三個重要的成員:Target(目標介面),Adaptee(源角色),Adapter(介面卡)。                  Target(目標介面):  所要轉換的期待的介面。(系

移動開發之設計模式-介面卡模式(IOS&Android)

資源 完全參照 組合模式|菜鳥教程 ,但不包括IOS程式碼 介面卡模式 介面卡模式(Adapter Pattern)是作為兩個不相容的介面之間的橋樑。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。 這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。

【IO】- IO 體系中的設計模式-介面卡模式

前言     之前的部落格說到了介面卡模式的概念和UML類圖,這次來聊下IO中的介面卡模式。 正文 IO流體系介紹     InputStreamReader 和OutputStreamWriter 類分別繼承了Reader和Writer 介面,但是