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

CnCandy發表於2019-06-22

為什麼要使用介面卡設計模式

在編寫專案的過程中,很多的時候寫好了一個程式碼量很多的類,突然要增加一個功能,但是在最初的設計專案的時候並沒有考慮到了這一點,所以為了提高程式碼的可擴充套件和可維護性,我們可以引入Java設計模式中的介面卡模式。舉個簡單的勵志,在我們電腦下載好了一些歌曲,我們需要把這些歌曲的檔案匯入到你的移動音樂播放裝置(手機或者mp3),這個時候我們電腦上只有usb介面,而手機或者MP3裝置並沒有一樣的usb介面,這時我們需要一根資料線進行連線,這樣我們通過資料線將電腦和音樂播放裝置連線起來,就可以進行資料的傳輸,我們可以把這根資料線看成我們所說的介面卡。介面卡設計模式可以連線兩個不相干的類進行資料的處理。

程式碼處理

這裡我們先來個簡單的介面卡設計模式來看下所謂的介面卡模式是否像你想象的一樣高大尚

這裡我們應該準備幾個類來進行測試

  1. 兩個介面
  2. 兩個實現類
  3. 一個測試類
  4. 一個介面卡類

 首先我們建立一個USB介面和一個MP3介面

USB介面

package net.cncandy.adapter;

public interface USB {
	public String showConnectInfo();
}

MP3介面

package net.cncandy.adapter;

public interface MP3 {
	public String showMp3Info();
}

每個介面我呢都寫一個顯示連結資訊的方法。好判斷我們是否連結上

在建立ComputerUSB類和MusicMp3類,這兩個類分別實現USB介面和MP3介面,重寫介面的方法。

ComputerUSB類

package net.cncandy.adapter;

public class ComputerUSB implements USB{

	private USB usb;
	
	public ComputerUSB(USB usb) {
		
		this.usb = usb;
	}
	
	@Override
	public String showConnectInfo() {
		return usb.showConnectInfo();
	}

}

MusicMp3類

package net.cncandy.adapter;

public class MusicMp3 implements MP3{

	@Override
	public String showMp3Info() {
		return "這個MP3裝置已經連線";
	}

}

 接下來我們在沒有介面卡的情況下先看下講MP3和USB能否連結

這顯然是不可能連結到的,,因為在我們的ComputerUSB類中,建構函式是傳遞的USB介面,因為MusicMp3類並不是實現的USB介面,所以這裡就不能直接傳遞值,這裡就要用到我們們本次要學習的介面卡設計模式,通過介面卡連結兩個不相干的類。

介面卡設計模式分析

 先向下,既然是要寫一個可以連線兩個不相干的類,那麼首先我們要將介面卡的類要實現如上ComputerUSB類所實現的介面,那樣我們才能在ComputerUSB的構造器中填入該介面卡,所以我們這個介面卡類要實現USB的介面,同時需要傳入MusicMp3這個類的物件,所以說在介面卡類的建構函式裡引數應該是MusicMp3類的物件,應為我們的MusicMp3類是實現的MP3介面,我們還要建立一個MP3的屬性(這個就是玩的多型),以便於接受傳進來的MusicMp3物件。看上面這麼多其實可以總結一下幾點:

  • 介面卡類實現USB介面
  • 介面卡類的建構函式引數是MP3
  • 建立一個MP3的屬性,接受建構函式傳進來的值

接下看下介面卡的程式碼,可以好好的理解下,這些程式碼裡面用到了多型的知識,如果不瞭解多型的話,可以先看下多型在來看次篇文章

package net.cncandy.adapter;

public class Adapter implements USB{

	//用於接收構造方法傳進來的MP3類物件
	private MP3 MusicMp3;
	
	//建構函式
	public Adapter(MP3 mp3) {
		this.MusicMp3 = mp3;
	}
	
	//重寫的USB介面的方法
	@Override
	public String showConnectInfo() {
		return MusicMp3.showMp3Info();
	}

}

通過測試類進行測試

public class TestDemo {

	public static void main(String[] args) {
		MusicMp3 mp3 = new MusicMp3();
		ComputerUSB computerUSB = new ComputerUSB(new Adapter(mp3));
		System.out.println(computerUSB.showConnectInfo());
	}

}

顯示的結果,看這樣就可以通過介面卡連結兩個不相干的類了。

介面卡設計模式的優缺點

優點:可以提高程式碼的可擴充套件和可維護性,更好的程式碼複用,如果功能相同介面不一樣的話,可以通過介面卡來進行處理

缺點:過多的介面卡會讓程式碼很亂,不容易掌控,在寫專案的過程中使用介面卡不能太多。

相關文章