什麼是擴充卡模式?
擴充卡模式(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();
}
}
測試結果:
普通類 具有普通功能…
被适配類 具有特殊功能…
轉載:https://blog.csdn.net/qq_36982160/article/details/79965027