介面卡模式之類介面卡與物件介面卡的區別及程式碼實現
阿新 • • 發佈:2019-02-04
什麼是介面卡模式?
介面卡模式(Adapter):直觀理解就是使原來不能一起相互工作(介面不相容)的兩個功能通過Adapter相容在一起。
類介面卡和物件介面卡
類介面卡
Adapter 類繼承Adaptee (被適配類),同時實現Target 介面(因為 Java 不支援多繼承,所以只能通過介面的方法來實現多繼承),在 Client 類中我們可以根據需要選擇並建立任一種符合需求的子類,來實現具體功能。
物件介面卡
不使用多繼承或繼承的方式,而是使用直接關聯,或者稱為委託的方式。
區別
類介面卡的重點在於類,是通過構造一個繼承Adaptee類來實現介面卡的功能;
物件介面卡的重點在於物件,是通過在直接包含Adaptee類來實現的,當需要呼叫特殊功能的時候直接使用Adapter中包含的那個Adaptee物件來呼叫特殊功能的方法即可。
Demo
類介面卡
// 已存在的、具有特殊功能、但不符合我們既有的標準介面的類
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();
}
}
測試結果:
普通類 具有普通功能…
被適配類 具有特殊功能…
物件介面卡
// 介面卡類,直接關聯被適配類,同時實現標準介面
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();
}
}
測試結果:
普通類 具有普通功能…
被適配類 具有特殊功能…