適配器模式將某個類的接口轉化成客戶端期望的另一個接口表示,目的是消除由於接口不匹配所造成的類的兼容問題,約摸有一種亡羊補牢的感覺。主要分三類:類的適配器模式、對象的適配器模式、接口的適配器模式。
一、類的適配器模式
1、創建原始類
public class Source {
public void method1(){
System.out.println("Source的method1方法");
}
}
2、創建接口,目的就是爲了兼容原始類
public interface Target{
public void method1();
punlic void method2();
}
3、實現接口
public class Adapter extends Source implements Target{
@Override
public void method2(){
System.out.println("Adapter的method2的方法");
}
}
4、編寫測試類,查看詳情
public class Test{
public static void main(String[] args){
Target target = new Adapter();
target.method1();
target.method2();
}
}
5、運行後打印結果
Source的method1方法
Adapter的method2方法
由此可以看出,Target接口的實現類 Adapter 具有了 Source 類的功能,可以說Adapter對Source做了適配。
二、對象的適配器模式
基本思路和類的適配器模式相同,只是將Adapter類做修改,此次不再繼承Source類,而是持有Source類的實例,以達到兼容性的問題。
1、以上步驟省略,直接從創建Target實現類開始
public class Adapter implements Target {
private Source source;
public Adapter(Source source) {
this.source = source;
}
@Override
public void method1() {
source.method1();
}
@Override
public void method2() {
System.out.println("Adapter的method方法");
}
}
2、測試類如下
public class Test {
public static void main(String[] args){
Source source=new Source();
Target target=new Adapter(source);
target.method1();
target.method2();
}
}
3、結果如下
Source的method1方法
Adapter的method2方法
三、接口的適配器模式
有時,我們一個接口中有多個抽象方法,當我們寫該接口的實現類時,必須實現該接口的所有方法,這明顯是比較浪費的。因爲並不是所有的方法都是我們需要的,有時可能只需要一兩個。爲了解決這個問題,我們引入接口的適配器模式,藉助一個抽象類,該抽象類實現了該接口的所有的方法,而不和我們原始的接口打交道,只和抽象類之間有聯繫。所有我們需要一個類,繼承該抽象類,重寫我們需要的方法就可以了。
1、創建抽象類 Wraaper 來實現 Target 接口
public abstract class Wraaper implements Target{
@OVerride
public void method1(){
}
@Override
public void method2(){
}
}
2、創建繼承類
public class S1 extends Wraaper{
@Override
public void method1(){
System.out.println("S1 的 method1");
}
}
public class S2 extends Wraaper{
@Override
public void method2(){
System.out.println("S2 的 method2");
}
}
3、創建測試類
public class Test {
public static void main(String[] args){
S1 ss=new S1();
S2 sm=new S2();
ss.method1();
ss.method2();
sm.method1();
sm.method2();
}
}
適配器模式相對來說比較簡單,當項目升級時用到的可能性還是比較大的,故在此一記。。。