適配器模式(adapter)是結構性模式的一種。結構型模式的核心作用是從程序的結構上實現低耦合,從而可以擴大整體的類結構,用來解決更大的問題。
模式的使用場景
將一個類的接口換成客戶需要的另外一個接口,Adapter模式使得原本不兼容不能在一起工作的那些類可以在一起工作。
經常用於舊系統的改造升級。
在java.io.InputStreamReader(InputStream)和java.io.OutputStreamWriter(OutputStream)用到
模式中的角色
目標接口(Target):客戶期待的接口。目標可以是具體的也可以是抽象的類,也可以是接口。
需要適配的類(adaptee):需要適配的類,或者配置類。
適配器(adapter):通過包裝一個合適的對象,把原接口轉換成目標接口。
模式的實現
//被適配的類
public class Adaptee {
//被適配的方法
public void request(){
//被適配的類的操作
}
}
//修改後的接口
public interface Target {
//修改後接口的方法
void handleReq();
}
//適配器類
public class Adapter extends Adaptee implements Target{
//適配器的適配方法,這裏是用繼承的方式實現的
public void handleReq() {
super.request();
}
}
//使用類
public class Client {
//使用類調用適配器的方法
public void test1(Target t){
t.handleReq();
}
//具體使用(繼承方式的使用)
public static void main(String[] args) {
Client c = new Client();
Target t = new Adapter();
c.test1(t);
}
}
其實適配器不止可以用上述的繼承方式,也可以用下面的組合的方式
//適配器類
public class Adapter implements Target{
private Adaptee adaptee;
//適配器的適配方法,這裏是用組合的方式實現的
public void handleReq() {
adaptee.request();
}
public Adapter(Adaptee a){
super();
this.adaptee = a;
}
}
//使用類
public class Client {
//使用類調用適配器的方法
public void test1(Target t){
t.handleReq();
}
//具體使用(組合方式的使用)
public static void main(String[] args) {
Client c = new Client();
Adaptee a = new Adaptee();
Target t = new Adapter(a);
c.test1(t);
}
}
繼承的方式使用時代碼少一點,但是Java只能但繼承,組合的方式雖然對了一個對象的創建,但是讓程序的擴展性會變得更好了。