Java設計模式(6)----------介面卡模式
介面卡模式屬於一種結構型的設計模式,如同名字一樣,用於實現兩個原本不相關的介面的連通性,即進行適配。透過介面卡模式,可以擴充套件類的功能,使其擁有其他類的功能
介面卡模式的使用場景,凡是能聯絡到適配這兩個字的,一般都是適用的。比如說,電壓介面卡,透過在電源插排上接上一個電壓介面卡,我們的手機就可以進行充電了。比如說,讀卡器,透過在電腦的USB介面上插上一個讀卡器,我們的TF/SD/CF等記憶體卡就可以使用了。
介面卡模式的實現方法,主要有繼承和依賴。由於依賴關係具有更好的靈活性,而且可以一個類可以實現對多個類的依賴,所以出場率更高一些。
以依賴為例,在具體實現中,
- 主體類依賴介面卡類,兩者實現相同的介面。所以對於某個動作或者方法,當主體能夠完成的時候就自己完成,如果主體完成不了,就用介面卡類來完成。
- 在介面卡類中,則依賴了其他的類(假設名字為A)。在介面卡的對應方法中,執行的是A類的相關方法。
所以透過介面卡類,將原本不存在關聯的主體類和A類聯絡起來了。
在使用膝上型電腦的時候,我們可以檢視儲存在電腦硬碟上的電影。但是也經常會從朋友電腦上copy過來一些電影資源,但是碰巧,當時手頭上沒有隨身碟可以用,那麼就用TF卡和SD卡進行複製拿了過來。透過一個讀卡器(介面卡),我們可以把原本沒有相同介面的兩個類聯絡起來。電腦和讀卡器都具有相同的USB介面,將讀卡器插到電腦上,然後把對應的記憶體卡插進讀卡器中,就可以觀看記憶體卡中的電影了。電腦和讀卡器是依賴關係(電腦使用讀卡器),讀卡器與TF/SD卡也是依賴關係(讀卡器使用TF/SD卡)。
對應的UML類圖如下:
1)電腦介面
public interface ComputerInterface
{
void readFilesFromHardDisk(String diskType, String fileName);
}
2)記憶體卡介面
public interface CardInterface
{
void readFilesFromFlashMemory(String diskType, String fileName);
}
3)記憶體卡實體類
public class SDCard implements CardInterface
{
@Override
public void readFilesFromFlashMemory(String diskType, String fileName)
{
System.out.println("從SD卡放映電影:" + fileName);
}
}
public class TFCard implements CardInterface
{
@Override
public void readFilesFromFlashMemory(String diskType, String fileName)
{
System.out.println("從TF卡放映電影:" + fileName);
}
}
4)介面卡類
public class CardAdaptor implements ComputerInterface
{
CardInterface cardInterface;
@Override
public void readFilesFromHardDisk(String diskType, String fileName)
{
if ("SDCard".equals(diskType))
{
cardInterface = new SDCard();
}
else
{
cardInterface = new TFCard();
}
cardInterface.readFilesFromFlashMemory(diskType, fileName);
}
}
5)電腦類
public class Computer implements ComputerInterface
{
CardAdaptor cardAdaptor;
@Override
public void readFilesFromHardDisk(String diskType, String fileName)
{
if ("hardDisk".equals(diskType))
{
System.out.println("從硬碟放映電影:" + fileName);
}
else if ("TFCard".equals(diskType) || "SDCard".equals(diskType))
{
cardAdaptor = new CardAdaptor();
cardAdaptor.readFilesFromHardDisk(diskType, fileName);
}
else
{
System.out.println("引數非法");
}
}
}
6)驗證程式碼
/**
* 驗證
*/
public class Demo
{
public static void main(String[] args)
{
Computer computer = new Computer();
computer.readFilesFromHardDisk("hardDisk", "《亂世佳人》");
computer.readFilesFromHardDisk("TFCard", "《肖申克的救贖》");
computer.readFilesFromHardDisk("SDCard", "《教父》");
}
}
6)執行結果
從硬碟放映電影:《亂世佳人》
從TF卡放映電影:《肖申克的救贖》
從SD卡放映電影:《教父》Process finished with exit code 0
凡是能與適配兩個字沾邊的,都可以使用介面卡模式
介面卡模式的優點和缺點都很明顯。優點是透過介面卡,聯絡原本不相關的類,打通二者的介面。缺點是如果在一個工程中大量使用介面卡模式,對導致程式碼可讀性變差,邏輯變得複雜。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1978/viewspace-2799747/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 6.java設計模式之介面卡模式Java設計模式
- java設計模式-介面卡模式Java設計模式
- Java設計模式之介面卡設計模式Java設計模式
- Java設計模式之介面卡模式Java設計模式
- Java 設計模式(一)《介面卡模式》Java設計模式
- Java設計模式7:介面卡模式Java設計模式
- Java設計模式之(八)——介面卡模式Java設計模式
- 設計模式——6介面卡模式(Adapter)設計模式APT
- Java設計模式6:策略模式Java設計模式
- 設計模式----介面卡模式設計模式
- 設計模式-介面卡模式設計模式
- 設計模式:介面卡模式設計模式
- 【設計模式】介面卡模式設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 重學 Java 設計模式:實戰介面卡模式Java設計模式
- java23種設計模式——六、介面卡模式Java設計模式
- JavaScript 設計模式 —— 介面卡模式JavaScript設計模式
- 設計模式(七)介面卡模式設計模式
- 設計模式之介面卡模式設計模式
- 設計模式之【介面卡模式】設計模式
- 設計模式(五):介面卡模式設計模式
- PHP設計模式_介面卡模式PHP設計模式
- 設計模式(十四):介面卡模式設計模式
- 初探Java設計模式2:結構型模式(代理模式,介面卡模式等)Java設計模式
- PHP 設計模式之介面卡模式PHP設計模式
- Javascript 設計模式之介面卡模式JavaScript設計模式
- 設計者模式之介面卡模式模式
- 設計模式【6.1】-- 初探介面卡模式設計模式
- PHP設計模式(2)—— 介面卡模式PHP設計模式
- python 設計模式-介面卡模式Python設計模式
- 極簡設計模式-介面卡模式設計模式
- Python設計模式-介面卡模式Python設計模式
- 設計模式系列之「介面卡模式」設計模式
- php模式設計之 介面卡模式PHP模式
- JS 設計模式 十(介面卡模式)JS設計模式
- 介面卡設計模式設計模式
- Java模式(介面卡模式)Java模式
- java設計模式學習筆記-5-介面卡模式Java設計模式筆記