適配器模式(Adapter Pattern)是作爲兩個不兼容的接口之間的橋樑。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。
組成結構
- 客戶 (Client):客戶類。
- 目標接口(Target):客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。
- 適配者(Adaptee):需要適配的類或適配者類。
- 適配器(Adapter):通過包裝一個需要適配的對象,把原接口轉換成目標接口。
舉個例子:
電腦的電源是兩孔的,現在牆上的插座是三孔,這時就需要一個三控插座轉兩孔插座的轉接器
分析:
三孔插座是目標接口
二孔插座是適配者
三控轉兩孔轉接器是適配器
上代碼:
三控插座
package com.example.adapter;
/**
* 三控插座
*/
public class SocketThree {
public void insert(ThreeToTwoAdapter threeToTwoAdapter){
threeToTwoAdapter.handRquest();
}
}
二孔插座
package com.example.adapter;
/**
* 二孔插座想插入三控插座但是插入不了
*/
public class SocketTwo {
public void request(){
System.out.println("我是二孔插座,我已經通過適配器插入三控插座");
}
}
適配器接口
package com.example.adapter;
/**
* 接口三控轉兩孔轉換器抽象
*/
public interface ThreeToTwoAdapter {
void handRquest();
}
適配器接口實現
package com.example.adapter;
/**
* 需要連接二孔插座和三孔插座的適配器
*/
public class ThreeToTwoAdapterImpl implements ThreeToTwoAdapter {
private SocketTwo socketTwo;
public ThreeToTwoAdapterImpl(SocketTwo socketTwo) {
this.socketTwo = socketTwo;
}
@Override
public void handRquest() {
socketTwo.request();
}
}
測試類
package com.example.adapter;
public class Test {
public static void main(String[] args) {
//兩孔插座
SocketTwo socketTwo = new SocketTwo();
//三控插座
SocketThree socketThree = new SocketThree();
//兩孔插座連接適配器
ThreeToTwoAdapterImpl threeToTwoAdapterImpl = new ThreeToTwoAdapterImpl(socketTwo);
//將配器插入三控插座
socketThree.insert(threeToTwoAdapterImpl);
}
}
測試結果: