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