現實生活中的適配器
實現電源適配器
public interface DBSocketInterface {
/**
* 這個方法的名字叫做:使用兩項圓頭的插口供電
* 本人英語就這個水平
*/
void powerWithTwoRound();
}
德國插座實現德標接口
/**
* 德國插座
*/
public class DBSocket implements DBSocketInterface{
public void powerWithTwoRound(){
System.out.println("使用兩項圓頭的插孔供電");
}
}
德國旅館是一個客戶端,它裏面有德標的接口,可以使用這個德標接口給手機充電:
/**
* 德國賓館
*/
public class Hotel {
//旅館中有一個德標的插口
private DBSocketInterface dbSocket;
public Hotel(){}
public Hotel(DBSocketInterface dbSocket) {
this.dbSocket = dbSocket;
}
public void setSocket (DBSocketInterface dbSocket){
this.dbSocket = dbSocket;
}
//旅館中有一個充電的功能
public void charge(){
//使用德標插口充電
dbSocket.powerWithTwoRound();
}
}
public class Test {
public static void main(String[] args) {
//初始化一個德國插座對象, 用一個德標接口引用它
DBSocketInterface dbSoket = new DBSocket();
//創建一個旅館對象
Hotel hotel = new Hotel(dbSoket);
//在旅館中給手機充電
hotel.charge();
}
}
運行程序,打印出以下結果: 使用兩項圓頭的插孔供電
國標接口:
/**
* 國標接口
*/
public interface GBSocketInterface {
/**
* 這個方法的名字叫做:使用三項扁頭的插口供電
* 本人英語就這個水平,從有道詞典查得, flat意思好像是: 扁的
*/
void powerWithThreeFlat();
}
中國插座實現國標接口:
/**
* 中國插座
*/
public class GBSocket implements GBSocketInterface{
@Override
public void powerWithThreeFlat() {
System.out.println("使用三項扁頭插孔供電");
}
}
可以認爲這兩個東西是我帶到德國去的,目前他們還不能使用,因爲接口不一樣。那麼我必須創建一個適配器,這個適配器必須滿足以下條件:
public class SocketAdapter
implements DBSocketInterface{ //實現舊接口
//組合新接口
private GBSocketInterface gbSocket;
/**
* 在創建適配器對象時,必須傳入一個新街口的實現類
* @param gbSocket
*/
public SocketAdapter(GBSocketInterface gbSocket) {
this.gbSocket = gbSocket;
}
/**
* 將對就接口的調用適配到新接口
*/
@Override
public void powerWithTwoRound() {
gbSocket.powerWithThreeFlat();
}
}
這個適配器類滿足了上面的兩個要求。下面寫一段測試代碼來驗證一下適配器能不能工作,我們按步驟一步步的寫出代碼,以清楚的說明適配器是如何使用的。
GBSocketInterface gbSocket = new GBSocket();
Hotel hotel = new Hotel();
3 由於沒法充電,我拿出隨身帶去的適配器,並且將我帶來的充電器插在適配器的上端插孔中。這個上端插孔是符合國標的,我的充電器完全可以插進去。
SocketAdapter socketAdapter = new SocketAdapter(gbSocket);
4 再將適配器的下端插入賓館裏的插座上
hotel.setSocket(socketAdapter);
hotel.charge();
public class TestAdapter {
public static void main(String[] args) {
GBSocketInterface gbSocket = new GBSocket();
Hotel hotel = new Hotel();
SocketAdapter socketAdapter = new SocketAdapter(gbSocket);
hotel.setSocket(socketAdapter);
hotel.charge();
}
}