本文實例講述了Java適配器模式應用之電源適配器功能。分享給大家供大家參考,具體如下:
一、模式定義
存在兩種適配器模式
1 對象適配器模式,在這種適配器模式中,適配器容納一個它包裹的類對象的物理實體。
2 類適配器模式,在這種適配器模式中,適配器繼承自已實現的類。
二、模式舉例
1 模式分析
我們藉用筆計本電源適配器來說明這一模式。
已經存在的交流電源筆記本電腦電源適配器
2 適配器模式的靜態建模
3 代碼舉例
3.1 抽象電源建立
package com.demo.power;/** * 電源基類* * @author * */public abstract class AbsBasePower{ // 電壓值private float power; // 單位private String unit = "V"; // 構造方法public AbsBasePower(float power) { this.power = power; } public float getPower() { return power; } public void setPower(float power) { this.power = power; } public String getUnit() { return unit; } public void setUnit(String unit) { this.unit = unit; }}3.2 220v電源接口
package com.demo.power.v220;/** * 220V 電源接口* * @author * */public interface IPower220 { // 220V交流電源打印public void output220v();}3.3 220v電源實現類
package com.demo.power.v220;import com.demo.power.AbsBasePower;/** * 220V電源* * @author * */public class Power220 extends AbsBasePower implements IPower220{ // 構造方法public Power220() { super(220); } // 220V電源輸出public void output220v() { System.out.println("----這是[" + this.getPower() + this.getUnit() + "]電源!..."); }}3.4 12v電源接口
package com.demo.power.v12;/** * 12V 電源接口* * @author * */public interface IPower12 { // 12V電源打印public void output12v();}3.5 12v電源實現類
package com.demo.power.v12;import com.demo.power.AbsBasePower;/** * 正常的12V電源* * @author * */public class Power12 extends AbsBasePower implements IPower12 { // 12V電源構造方法public Power12() { super(12); } // 12V電源輸出public void output12v() { System.out.println("----這是[" + this.getPower() + this.getUnit() + "]電源!..."); }}3.6 12v電源對象適配器
package com.demo.adapter;import com.demo.power.AbsBasePower;import com.demo.power.v12.IPower12;/** * 電源適配器(實現目標對象接口即:12V電源接口) * * @author * */public class AdapterPower12 implements IPower12 { // 待轉換的對象private final AbsBasePower absBasePower; // 適配器構造方法將待轉換對像傳入public AdapterPower12(AbsBasePower absBasePower) { this.absBasePower = absBasePower; } // 實現目標對象方法public void output12v() { // 獲得外部電源值float powerFloat = this.absBasePower.getPower(); // 進行電源轉換if (powerFloat == 380) { // 380V電源轉換powerFloat = powerFloat / 31.67f; } else if (powerFloat == 220) { // 220V電源轉換powerFloat = powerFloat / 18.33f; } else if (powerFloat == 110) { // 110V電源轉換powerFloat = powerFloat / 9.17f; } else { System.out.println("----不能適配電源!..."); return; } // 處理轉換結果powerFloat = (int) (powerFloat * 10) / 10.0f; System.out.println("----這是[" + powerFloat + this.absBasePower.getUnit() + "]電源!..."); }}3.7 12v電源類適配器
package com.demo.adapter;import com.demo.power.AbsBasePower;import com.demo.power.v12.IPower12;/** * 電源適配器(實現目標對象接口即:12V電源接口) 類適配器模式* * @author * */public class AdapterPower12Ext extends AbsBasePower implements IPower12 { // 適配器構造方法將待轉換對像傳入public AdapterPower12Ext(AbsBasePower absBasePower) { super(absBasePower.getPower()); } // 實現目標對象方法@Override public void output12v() { // 獲得外部電源值float powerFloat = this.getPower(); // 進行電源轉換if (powerFloat == 380) { // 380V電源轉換powerFloat = powerFloat / 31.67f; } else if (powerFloat == 220) { // 220V電源轉換powerFloat = powerFloat / 18.33f; } else if (powerFloat == 110) { // 110V電源轉換powerFloat = powerFloat / 9.17f; } else { System.out.println("----不能適配電源!..."); return; } // 處理轉換結果powerFloat = (int) (powerFloat * 10) / 10.0f; System.out.println("----這是[" + powerFloat + this.getUnit() + "]電源!..."); }}3.8 測試適配器
package com.demo;import com.demo.adapter.AdapterPower12;import com.demo.adapter.AdapterPower12Ext;import com.demo.power.v12.IPower12;import com.demo.power.v12.Power12;import com.demo.power.v220.Power220;/** * 客戶端程序調用* * @author * */public class Client { /** * @param args */ public static void main(String[] args) { // 我們首先生成一個220V電源對象! Power220 power220 = new Power220(); power220.output220v(); // 接下來,我們在生成一個12V電源對象! IPower12 power12 = new Power12(); power12.output12v(); // 最後,我們使用電源適配器將220V電源轉換為12V電源! System.out.println("/n----電源適配器轉換中..."); IPower12 adapterPower12 = new AdapterPower12(power220); adapterPower12.output12v(); System.out.println("----電源適配器轉換結束!"); // 類適配器實現System.out.println("/n----類適配器電源適配器轉換中..."); IPower12 adapterPower12Ext = new AdapterPower12Ext(power220); adapterPower12Ext.output12v(); System.out.println("----類適配器電源適配器轉換結束!"); }}3.9 運行結果
----這是[220.0V]電源! ...
----這是[12.0V]電源! ...
----電源適配器轉換中...
----這是[12.0V]電源! ...
----電源適配器轉換結束!
----類適配器電源適配器轉換中...
----這是[12.0V]電源! ...
----類適配器電源適配器轉換結束!
三、設計原則
1使用對象組合,面向接口和抽象編程
2“開一閉”原則
四、使用場合
1 軟件系統結構需要升級或擴展,又不想影響原有系統穩定運行的時候
2 轉換類之間的差不是很大的時候
3 想創建一個可以復用的類,該類可以與其他不相關類或不可預見類協同工作的時候
五、類適配器模式和對象適配器模式的靜態類圖
更多關於java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。