Java 設計模式之介面卡模式,Java 類介面卡,Java 物件介面卡
阿新 • • 發佈:2021-06-30
Java 設計模式之介面卡模式,
Java 類介面卡,
Java 物件介面卡
================================
©Copyright 蕃薯耀2021-06-30
https://www.cnblogs.com/fanshuyao/
一、類介面卡
1、目標介面
public interface IVoltage { public int output(); }
2、目標類
public class Voltage220 implements IVoltage{ @Override public int output() { System.out.println("電源輸出220V電壓"); return 220; } }
3、類介面卡(介面卡英文是:Adapter,非Adaptor,示例中寫錯了)
/** * 類介面卡,通過繼承目標類(Voltage220)和實現目標介面(IVoltage) * */ public class Voltage10Adaptor extends Voltage220 implements IVoltage{ @Override public int output() { int v220 = super.output(); int v10 = v220 / 22; System.out.println("介面卡輸出"+ v10 +"V電壓"); return v10; } }
4、手機類
public class Mobile { private IVoltage iVoltage; public IVoltage getiVoltage() { return iVoltage; } public void setiVoltage(IVoltage iVoltage) { this.iVoltage = iVoltage; } publicMobile(IVoltage iVoltage) { super(); this.iVoltage = iVoltage; } //充電 public void charge() { if(this.iVoltage.output() != 10) { System.out.println("電壓(" + this.iVoltage.output() + ")不匹配,手機不能充電"); }else { System.out.println("手機正在充電…"); } } }
5、客戶端測試類
public class Client { public static void main(String[] args) { Voltage220 voltage220 = new Voltage220(); //voltage220.output(); Mobile m = new Mobile(voltage220); m.charge(); System.out.println("-------------------------------"); Mobile m2 = new Mobile(new Voltage10Adaptor()); m2.charge(); } }
測試結果:
電源輸出220V電壓 電源輸出220V電壓 電壓(220)不匹配,手機不能充電 ------------------------------- 電源輸出220V電壓 介面卡輸出10V電壓 手機正在充電…
二、物件介面卡
1、物件介面卡類
/** * 物件介面卡,就是不繼承目標類,而是通過在介面卡中增加目標類的物件,以構造方法注入物件的方式,解決類只能單繼承的問題,因為介面卡如果繼承了其它類,就不能再繼承目標類 * */ public class Voltage10AdaptorObject implements IVoltage{ private IVoltage iVoltage; public Voltage10AdaptorObject(IVoltage iVoltage) { this.iVoltage = iVoltage; } @Override public int output() { int vTarget = this.iVoltage.output(); int vAdaptor = 0; if(vTarget == 220) { vAdaptor = vTarget / 22; }else if(vTarget == 110) { vAdaptor = vTarget / 11; } System.out.println("介面卡輸出"+ vAdaptor +"V電壓"); return vAdaptor; } }
2、客戶端測試類
public class Client { public static void main(String[] args) { Voltage220 voltage220 = new Voltage220(); //voltage220.output(); Mobile m = new Mobile(voltage220); m.charge(); System.out.println("-------------------------------"); Mobile m2 = new Mobile(new Voltage10Adaptor()); m2.charge(); System.out.println("+++++++++++++++++++++++++++++"); Mobile m3 = new Mobile(new Voltage10AdaptorObject(voltage220)); m3.charge(); } }
測試結果:
電源輸出220V電壓 電源輸出220V電壓 電壓(220)不匹配,手機不能充電 ------------------------------- 電源輸出220V電壓 介面卡輸出10V電壓 手機正在充電… +++++++++++++++++++++++++++++ 電源輸出220V電壓 介面卡輸出10V電壓 手機正在充電…
三、總結
介面卡模式(Adapter Pattern)
三個角色:
1:Target(目標抽象類):目標抽象類定義客戶所需的介面,可以是一個抽象類或介面,一般是介面,因為類是單繼承(不好)。
2:Adaptee(適配者類):適配者即需要被適配的角色,它定義了一個已經存在的介面(方法),這個介面需要適配。
3:Adapter(介面卡類):作為一個轉換器,需要實現Target類,對Adaptee和Target進行適配。它是介面卡模式的核心。
儘量使用物件的介面卡模式,多用合成/聚合、少用繼承。
對於類介面卡,介面卡可以重定義的部分行為,相當於子類覆蓋父類的部分實現方法。
(時間寶貴,分享不易,捐贈回饋,^_^)
================================
©Copyright 蕃薯耀2021-06-30
https://www.cnblogs.com/fanshuyao/