国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java設計模式之 Adapter(糾合不兼容的類)

2019-11-18 10:46:39
字體:
來源:轉載
供稿:網友

  定義:
  將兩個不兼容的類糾合在一起使用,屬于結構型模式,需要有Adaptee(被適配者)和Adaptor(適配器)兩個身份.
  
  為何使用?
  我們經常碰到要將兩個沒有關系的類組合在一起使用,第一解決方案是:修改各自類的接口,但是假如我們沒有源代碼,或者,我們不愿意為了一個應用而修改各自的接口。 怎么辦?
  
  使用Adapter,在這兩種接口之間創建一個混合接口(混血兒).
  
  如何使用?
  實現Adapter方式,其實"think in java"的"類再生"一節中已經提到,有兩種方式:組合(composition)和繼續(inheritance).
  
  假設我們要打樁,有兩種類:方形樁 圓形樁.
  public class SquarePeg{
    public void insert(String str){
      System.out.    }
  
  }
  
  public class RoundPeg{
    public void insertIntohole(String msg){
      System.out.println("RoundPeg insertIntoHole():"+msg);
  }
  }
  
  現在有一個應用,需要既打方形樁,又打圓形樁.那么我們需要將這兩個沒有關系的類綜合應用.假設RoundPeg我們沒有源代碼,或源代碼我們不想修改,那么我們使用Adapter來實現這個應用:
  
  public class PegAdapter extends SquarePeg{
  
    private RoundPeg roundPeg;
  
    public PegAdapter(RoundPeg peg)(this.roundPeg=peg;)
  
    public void insert(String str){ roundPeg.insertIntoHole(str);}
  
  }
  
  在上面代碼中,RoundPeg屬于Adaptee,是被適配者.PegAdapter是Adapter,將Adaptee(被適配者RoundPeg)和Target(目標SquarePeg)進行適配.實際上這是將組合方法(composition)和繼續(inheritance)方法綜合運用.
  
  PegAdapter首先繼續SquarePeg,然后使用new的組合生成對象方式,生成RoundPeg的對象roundPeg,再重載父類insert()方法。從這里,你也了解使用new生成對象和使用extends繼續生成對象的不同,前者無需對原來的類修改,甚至無需要知道其內部結構和源代碼.
  
  假如你有些Java使用的經驗,已經發現,這種模式經常使用。
  
  進一步使用
  上面的PegAdapter是繼續了SquarePeg,假如我們需要兩邊繼續,即繼續SquarePeg 又繼續RoundPeg,因為Java中不答應多繼續,但是我們可以實現(implements)兩個接口(interface)
  
  public interface IRoundPeg{
    public void insertIntoHole(String msg);
  
  }
  
  public interface ISquarePeg{
    public void insert(String str);
  
  }
  
  下面是新的RoundPeg 和SquarePeg, 除了實現接口這一區別,和上面的沒什么區別。
  public class SquarePeg implements ISquarePeg{
    public void insert(String str){
      System.out.println("SquarePeg insert():"+str);
    }
  
  }
  
  public class RoundPeg implements IRoundPeg{
    public void insertIntohole(String msg){
      System.out.println("RoundPeg insertIntoHole():"+msg);
    }
  }
  
  下面是新的PegAdapter,叫做two-way adapter:
  
  public class PegAdapter implements IRoundPeg,ISquarePeg{
  
    private RoundPeg roundPeg;
    private SquarePeg squarePeg;
  
    // 構造方法
    public PegAdapter(RoundPeg peg){this.roundPeg=peg;}
    // 構造方法
    public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)
  
    public void insert(String str){ roundPeg.insertIntoHole(str);}
  
  }
  
  還有一種叫Pluggable Adapters,可以動態的獲取幾個adapters中一個。使用Reflection技術,可以動態的發現類中的Public方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 淮安市| 靖江市| 内丘县| 鄢陵县| 海盐县| 黑山县| 屯留县| 区。| 连州市| 凤城市| 辰溪县| 洛扎县| 岫岩| 乌兰浩特市| 东方市| 呼和浩特市| 利津县| 兴宁市| 微山县| 古交市| 玛多县| 灵宝市| 新丰县| 漠河县| 宜宾市| 邯郸县| 义马市| 蓝山县| 荆门市| 新龙县| 福泉市| 越西县| 普定县| 鹤庆县| 南召县| 高碑店市| 汨罗市| 哈尔滨市| 滕州市| 五大连池市|