程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式之適配器形式(Adapter形式)引見

Java設計形式之適配器形式(Adapter形式)引見

編輯:關於JAVA

Java設計形式之適配器形式(Adapter形式)引見。本站提示廣大學習愛好者:(Java設計形式之適配器形式(Adapter形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式之適配器形式(Adapter形式)引見正文


適配器形式界說:將兩個不兼容的類鸠合在一路應用,屬於構造型形式,須要有Adaptee(被適配者)和Adaptor(適配器)兩個身份。

為什麼應用適配器形式

我們常常碰著要將兩個沒有關系的類組合在一路應用,第一處理計劃是:修正各自類的接口,然則假如我們沒有源代碼,或許,我們不肯意為了一個運用而修正各自的接口。 怎樣辦?

應用Adapter,在這兩種接口之間創立一個混雜接口(混血兒)。

若何應用適配器形式

完成Adapter方法,其實"think in Java"的"類再生"一節中曾經提到,有兩種方法:組合(composition)和繼續(inheritance),

假定我們要打樁,有兩品種:方形樁 圓形樁。

public class SquarePeg{
 public void insert(String str){
  System.out.println("SquarePeg insert():"+str);
 }
}

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辦法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved