如果你知道電源擴充卡的作用,就應該很容易了解這個模式。
意圖:
将一個類的接口轉換成客戶希望的另外一個接口。 Adapter模式使得原本由于接口不相容而不能一起工作的那些類可以一起工作。
别名:
包裝器 Wrapper
結構:
類擴充卡
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SOjFTM5IDOhdjY2EWLjBzNh1iYkBzMtYDM2ETLiJzY3UmY1IzLcVTM2YzLcJzNwAzLcRnbl1GajFGd0F2LcRWYvxGc19CXt92YuUWelRXauwGZvw1LcpDc0RHaiojIsJye.jpg)
public interface Target {
public void request();
}
public class Adaptee {
public void specificRequest() {
//do something
}
}
//類擴充卡
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.specificRequest();
}
}
對象擴充卡
//對象擴充卡
public class Adapter implements Target {
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.specificRequest();
}
}
适用:
以下情況使用Adapter模式
• 你想使用一個已經存在的類,而它的接口不符合你的需求。
• 你想建立一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定相容的類)協同工作。
• (僅适用于對象Adapter)你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以比對它們的接口。對象擴充卡可以适配它的父類接口。
雙向擴充卡:
一般擴充卡對使用target接口的透明,無法給使用adaptee接口的使用。雙向擴充卡可以解決這個問題,使擴充卡更透明。
相關模式:
模式Bridge的結構與對象擴充卡類似,但是Bridge模式的出發點不同:Bridge目的是将接口部分和實作部分分離,進而對它們可以較為容易也相對獨立的加以改變。而Adapter則意味着改變一個已有對象的接口。
Decorator模式增強了其他對象的功能而同時又不改變它的接口。是以Decorator對應用程式的透明性比擴充卡要好。結果是Decorator支援遞歸組合,而純粹使用擴充卡是不可能實作這一點的。
模式Proxy在不改變它的接口的條件下,為另一個對象定義了一個代理。