設計模式——適配器模式

適配器模式的核心思想:把原有的接口轉變成調用者所期望的接口,從而使不同接口的類可以一起工作。

  適配器中包含如下3個角色。

  ●源角色Adaptee:需要適配的目標或接口。

  ●目標角色Target:所期望得到的接口。

  ●適配器角色Adapter:適配器類是本模式的核心,用來把源接口轉換成目標接口,顯然這3者角色之間的交互關係便組成了適配器模式的原型。

  適配器也叫做包裝器模式(Wrapper),根據適配對象的不同,又可以將適配器模式分爲3種子類型。

  ●類的適配器模式:用於對類進行適配。

  ●對象的適配器模式:用於對對象進行包裝。

  ●接口的適配器模式:用於對接口抽象化。

第一種:類的適配器模式,見代碼理解

    //源類Adaptee  
    public class Source{  
      public void operation1(){  
        System.out.println("原始類的方法");  
      }  
    }  
      
    //目標接口Target  
    public interface Targetable{  
      //與源類相同的接口函數  
      public void operation1();  
      //新的接口函數,源類中沒有  
      public void operation2();  
    }  
      
    //適配器模式,繼承源類,並實現目標接口  
    public class Adapter extends Source implements Targetable{  
      //實現目標類的新接口函數  
      public void operation2(){  
        System.out.println("適配目標類後的方法");  
      }  
    }  

第二種:對象的適配器模式,見如下代碼理解

    //包裝器模式  
      public class Wrapper implements Targetable{  
        //源類對象  
        private Source source;  
        //取得源類對象  
        public Wrapper(Source source){  
          super();  
          this.source = source;  
        }  
          
        //調用源類對象的方法  
        public void operation1(){  
          source.operation1();  
        }  
       
        //實現目標類的新接口函數  
        public void operation2(){  
          System.out.println("包裝目標類後的方法");  
        }  
      }  

第三種:接口的適配器模式,見代碼理解

  ●Sourceable是定義了多個接口函數的接口類。

  ●DefaultWrapper是一個抽象類,它實現了接口Sourceable,並且爲每一個接口函數提供了默認的實現。

依據DefaultWrapper就可以編寫不同的實現,在實現中只需要重寫部分待實現的函數,而不是要重寫全部。

見如下代碼理解:
 

    //源接口  
      public interface Sourceable{   
        public void operation1();  
        public void operation2();  
      }  
      
      //默認適配器類DefaultWrapper  
      public abstract class DefaultWrapper implements Sourceable{  
        public void operation1(){}  
        public void operation2(){}  
      }  
      
      //兩個實現類,可以選擇自己需要的實現  
      public class SourceSub1 extends DefaultWrapper{  

        public void operation1(){  
          System.out.println("源接口的一個實現子類Sub1");  
        }  
      }  
      
    public class SourceSub2 extends DefaultWrapper{  
      
        public void operation2(){  
          System.out.println("源接口的一個實現子類Sub2");  
        }  
      }  

java中的應用->

  →對象的適配器模式:Iterator適配器

  →對象的適配器模式:Enumeration適配器

  →接口的適配器模式:AWT事件適配器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章