教我兄弟學Android逆向03 破解第一個Android遊戲
阿新 • • 發佈:2021-07-27
介面卡模式
介面卡模式,又叫變壓器模式,他的功能是將一個類的介面變成客戶端所期望的另一種介面從而使得原本因為介面不匹配而導致無法在一起工作的兩個類能夠在一起工作,屬於結構性設計模式。
介面卡模式一般包含三種角色:
- 目標角色(Target): 也就是我們期望的介面;
- 源角色(Adaptee):被適配的,存在於系統中,內容滿足客戶需求(需要轉換),但介面不匹配的介面例項
- 介面卡(Adapter):將源角色(Adaptee)轉換為目標角色(Target)的類例項
介面卡模式有三種形式:類介面卡,物件介面卡、介面介面卡
類介面卡:
類介面卡的原理就是通過繼承來實現介面卡功能:讓介面卡Adapter實現目標角色Target介面,同時繼承源角色Adaptee,這樣介面卡就同時具備Target和Adaptee的特性,就可以將兩者進行轉化。
package com.jdwa.adapterv1;
/**
* Adaptee
*/
public class AC220 {
public int outputAC220(){
int output = 220;
System.out.println("輸出電壓:"+output+"V");
return output;
}
}
package com.jdwa.adapterv1;
public interface DC5 {
int outDC5();
}
package com.jdwa.adapterv1; public class PowerAdapter extends AC220 implements DC5 { @Override public int outDC5() { int adapteeInput = super.outputAC220(); int targetOutput = adapteeInput/44; System.out.println("輸入:"+adapteeInput+";輸出DC"+targetOutput+"V"); return targetOutput; } }
package com.jdwa.adapterv1;
public class Client {
public static void main(String[] args) {
DC5 dc5 = new PowerAdapter();
dc5.outDC5();
}
}
物件介面卡:
物件介面卡的原理就是通過組合來實現介面卡功能。具體做法:讓Adapter實現Target介面,然後內部持有Adaptee例項,然後讓Target介面規定方法內轉換Adaptee
程式碼只需要修改介面卡類:
package com.jdwa.adapterv1; public class ObjectPowerAdapter implements DC5{ private AC220 ac220; public ObjectPowerAdapter(AC220 ac220){ this.ac220 = ac220; } @Override public int outDC5() { int input = ac220.outputAC220(); int output = input/44; System.out.println("AC220:"+input+";DC5:"+output); return output; } }
介面介面卡:
介面介面卡的關注點與類介面卡與物件介面卡的不太一樣,類介面卡與物件介面卡著重於將系統存在的一個角色(Adaptee)轉化成目標介面(Target)所需內容,而介面介面卡的使用場景是解決介面方法過多,如果直接實現介面,那麼類會多出許多空實現的方法,類顯得很臃腫。此時,使用介面介面卡就能讓我們只實現我們需要的介面方法,目標更清晰。
說的直白點,就是在介面方法很多時,採用物件介面卡,只不過其他的方法是預設實現。這裡就不再用程式碼展示了。