文章目錄
- 一、 背景
- 二、 USB擴充卡
- 三、總結
設計模式一:
《用一個營銷政策的執行個體說清楚政策模式的應用場景》
設計模式二:
《用一個股票買賣的例子說清楚觀察者模式》
設計模式三:
《用一個蘇式面條的執行個體說清楚裝飾者模式》
設計模式四:
《用一個生産手機的簡單例子說清楚工廠模式》
設計模式五:
《用不同的實作方式建立單例模式》
設計模式六:
《用一個遙控開關的例子說清楚指令模式》
一、 背景
- 擴充卡模式是一個比較好了解的設計模式:其核心思想就是建立一個擴充卡對象(考慮到JAVA沒有多重繼承的特性,我們這裡隻介紹對象擴充卡),把一個接口轉換成另外一個接口,使得原本由于接口不相容的對象能一起工作。
- 我們舉實際生活中的一個USB轉換器(Apple USB-C 至 USB 轉換器)的例子來說明
二、 USB擴充卡
- 在MacBook上已經擁有了一個USB-C接口

/**
* MacBook USB-C接口
*/
public interface USB_C {
// 該接口可以直接連接配接USB-C裝置
void connect();
}
- 我們手上有個USB-A的裝置,希望能連接配接到MacBook上
/**
* USB-A
*/
public interface USB_A {
void connect();
}
/**
* USB-A裝置
*/
public class USB_A_Connection implements USB_A {
@Override
public void connect() {
System.out.println("USB-A裝置進行連接配接");
}
}
- 這時候我們需要借用一個USB擴充卡,把USB-A轉成USB-C的接口,讓MacBook可以連上USB-A裝置
/**
* USB-C轉USB-A擴充卡
*/
public class USBAdapter implements USB_C {
private USB_A usbA;
public USBAdapter(USB_A usbA) {
this.usbA = usbA;
}
@Override
public void connect(){
System.out.println("插入USB-C轉USB-A擴充卡");
usbA.connect();
}
}
- 最後,我們把U盤插到USB擴充卡上完成連接配接
/**
* 把USB-A裝置插入擴充卡
*/
public class Main {
public static void main(String[] args) {
// U盤
USB_A usbA = new USB_A_Connection();
// 插上擴充卡
USBAdapter usbAdapter = new USBAdapter(usbA);
// U盤與擴充卡連接配接
usbAdapter.connect();
}
}
三、總結
- 讓我們回顧一下以上轉換器例子的UML圖
- USB_C稱為目标接口
- USB_A_Connection稱為被适配者或源接口角色
- USBAdapter就是擴充卡,它的作用就是将被适配者的源接口轉化為目标接口
-
主要優點:
使用擴充卡模式,程式員不需要修改原有代碼而實作重用。
-
主要缺點:
過多使用擴充卡會導緻系統淩亂,且實作過程比較複雜。