基本介紹 適配器模式將某個類的介面轉換成客戶端期望的另一個介面表示,主要目的是相容性,讓原本因介面不匹配不能一起工作的兩個類可以協同工作。 適配器模式屬於結構性模式,主要分為三類:類適配器模式、對象適配器模式、介面適配器模式。 類適配器模式 什麼是類適配器模式 類適配器模式介紹:Adapter類,通 ...
基本介紹
適配器模式將某個類的介面轉換成客戶端期望的另一個介面表示,主要目的是相容性,讓原本因介面不匹配不能一起工作的兩個類可以協同工作。
適配器模式屬於結構性模式,主要分為三類:類適配器模式、對象適配器模式、介面適配器模式。
類適配器模式
什麼是類適配器模式
類適配器模式介紹:Adapter類,通過集成src類,實現dst類介面,完成src>dst的適配。
應用實例
案例
以生活中充電器的例子來講解適配器,充電器本身相當於Adapter,220V交流電相當於src(即被適配者),我們的dst(即目標)是5V直流電。
思路分析
代碼實現
1//被適配的類
2public class Voltage220V {
3 //輸出220V的電壓
4 public int output220V(){
5 int src=220;
6 System.out.println("電源電壓="+src+"伏");
7 return src;
8 }
9}
1//適配介面
2public interface IVoltage5V {
3 int output5V();
4}
1public class VoltageAdapter extends Voltage220V implements IVoltage5V {
2 @Override
3 public int output5V() {
4 int srcV = output220V();//獲取220V的電壓
5 int dstV = srcV / 44;//進行處理
6 return dstV;
7 }
8}
1public class Phone {
2 //充電
3 public void charging(IVoltage5V iVoltage5V){
4 if (iVoltage5V.output5V()==5){
5 System.out.println("現在電壓為5V,可以充電");
6 }else if (iVoltage5V.output5V()>5){
7 System.out.println("現在電壓大於5V,可以充電");
8 }
9 }
10}
1public class Client {
2 public static void main(String[] args) {
3 Phone phone = new Phone();
4 phone.charging(new VoltageAdapter());
5 }
6}
類適配器模式註意事項和細節
Java是單繼承機制,所以類適配器需要繼承src類這一點算是一個缺點,因為這要求dst必須是介面,有一定局限性。
src類的方法在Adapter中都會暴露出來,也增加了使用的成本。
由於其繼承了src類,所以它可以根據需求重寫src類的方法,使得Adapter的靈活性增強了。
對象適配器模式
什麼是對象適配器模式
基本思路和類的適配器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實例,以解決相容性的問題。即:持有src類,實現dst類介面,完成src>dst的適配。
根據“合成復用原則”,在系統中儘量使用關聯關係來替代繼承關係。
對象適配器模式是適配器模式常用的一種。
應用實例
案例
以生活中充電器的例子來講解適配器,充電器本身相當於Adapter,220V交流電相當於src(即被適配者),我們的dst(即目標)是5V直流電,使用對象適配器模式完成。
思路分析
代碼實現
1public class VoltageAdapter implements IVoltage5V {
2
3 private Voltage220V voltage220V;
4
5 //通過構造器傳入
6 public VoltageAdapter(Voltage220V voltage220V) {
7 this.voltage220V = voltage220V;
8 }
9
10 @Override
11 public int output5V() {
12 int dst = 0;
13 if (null != voltage220V) {
14 int src = voltage220V.output220();
15 dst = src / 44;
16 }
17 return dst;
18 }
19}
1public class Client {
2 public static void main(String[] args) {
3 Phone phone = new Phone();
4 phone.charging(new VoltageAdapter(new Voltage220V()));
5 }
6}
對象適配器註意事項和細節
對象適配器和類適配器其實算是同一種思想,只不過實現方式不同。根據合成復用原則,使用組合替代繼承,所以它解決了類適配器必須繼承src的局限性問題,也不再要求dst必須是介面。
使用成本更低更靈活。
介面適配器模式
什麼是介面適配器模式
當不需要全部實現介面提供的方法時,可先設計一個抽象類實現介面,併為該介面中每個方法提供一個預設實現(空方法),那麼該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求。
適用於一個介面不想使用其所有的方法的情況。
應用實例
思路分析
代碼實現
1public interface Interface4 {
2 void m1();
3 void m2();
4 void m3();