您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Java適配器模式應(yīng)用之電源適配器功能的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、模式定義
存在兩種適配器模式
1 對象適配器模式,在這種適配器模式中,適配器容納一個它包裹的類對象的物理實(shí)體。
2 類適配器模式,在這種適配器模式中,適配器繼承自已實(shí)現(xiàn)的類。
二、模式舉例
1 模式分析
我們借用筆計(jì)本電源適配器來說明這一模式。
已經(jīng)存在的交流電源
筆記本電腦
電源適配器
2 適配器模式的靜態(tài)建模
3 代碼舉例
3.1 抽象電源建立
package com.demo.power; /** * 電源基類 * * @author * */ public abstract class AbsBasePower { // 電壓值 private float power; // 單位 private String unit = "V"; // 構(gòu)造方法 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電源實(shí)現(xiàn)類
package com.demo.power.v220; import com.demo.power.AbsBasePower; /** * 220V電源 * * @author * */ public class Power220 extends AbsBasePower implements IPower220 { // 構(gòu)造方法 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電源實(shí)現(xiàn)類
package com.demo.power.v12; import com.demo.power.AbsBasePower; /** * 正常的12V電源 * * @author * */ public class Power12 extends AbsBasePower implements IPower12 { // 12V電源構(gòu)造方法 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; /** * 電源適配器 (實(shí)現(xiàn)目標(biāo)對象接口 即:12V電源接口) * * @author * */ public class AdapterPower12 implements IPower12 { // 待轉(zhuǎn)換的對象 private final AbsBasePower absBasePower; // 適配器構(gòu)造方法 將待轉(zhuǎn)換對象傳入 public AdapterPower12(AbsBasePower absBasePower) { this.absBasePower = absBasePower; } // 實(shí)現(xiàn)目標(biāo)對象方法 public void output12v() { // 獲得外部電源值 float powerFloat = this.absBasePower.getPower(); // 進(jìn)行電源轉(zhuǎn)換 if (powerFloat == 380) { // 380V電源轉(zhuǎn)換 powerFloat = powerFloat / 31.67f; } else if (powerFloat == 220) { // 220V電源轉(zhuǎn)換 powerFloat = powerFloat / 18.33f; } else if (powerFloat == 110) { // 110V電源轉(zhuǎn)換 powerFloat = powerFloat / 9.17f; } else { System.out.println("----不能適配電源!..."); return; } // 處理轉(zhuǎn)換結(jié)果 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; /** * 電源適配器 (實(shí)現(xiàn)目標(biāo)對象接口 即:12V電源接口) 類適配器 模式 * * @author * */ public class AdapterPower12Ext extends AbsBasePower implements IPower12 { // 適配器構(gòu)造方法 將待轉(zhuǎn)換對象傳入 public AdapterPower12Ext(AbsBasePower absBasePower) { super(absBasePower.getPower()); } // 實(shí)現(xiàn)目標(biāo)對象方法 @Override public void output12v() { // 獲得外部電源值 float powerFloat = this.getPower(); // 進(jìn)行電源轉(zhuǎn)換 if (powerFloat == 380) { // 380V電源轉(zhuǎn)換 powerFloat = powerFloat / 31.67f; } else if (powerFloat == 220) { // 220V電源轉(zhuǎn)換 powerFloat = powerFloat / 18.33f; } else if (powerFloat == 110) { // 110V電源轉(zhuǎn)換 powerFloat = powerFloat / 9.17f; } else { System.out.println("----不能適配電源!..."); return; } // 處理轉(zhuǎn)換結(jié)果 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; /** * 客戶端程序調(diào)用 * * @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電源轉(zhuǎn)換為12V電源! System.out.println("\n----電源適配器轉(zhuǎn)換中..."); IPower12 adapterPower12 = new AdapterPower12(power220); adapterPower12.output12v(); System.out.println("----電源適配器轉(zhuǎn)換結(jié)束!"); // 類適配器實(shí)現(xiàn) System.out.println("\n----類適配器 電源適配器轉(zhuǎn)換中..."); IPower12 adapterPower12Ext = new AdapterPower12Ext(power220); adapterPower12Ext.output12v(); System.out.println("----類適配器 電源適配器轉(zhuǎn)換結(jié)束!"); } }
3.9 運(yùn)行結(jié)果
----這是[220.0V]電源!...
----這是[12.0V]電源!...
----電源適配器轉(zhuǎn)換中...
----這是[12.0V]電源!...
----電源適配器轉(zhuǎn)換結(jié)束!
----類適配器 電源適配器轉(zhuǎn)換中...
----這是[12.0V]電源!...
----類適配器 電源適配器轉(zhuǎn)換結(jié)束!
三、設(shè)計(jì)原則
1使用對象組合,面向接口和抽象編程
2“開一閉”原則
四、使用場合
1 軟件系統(tǒng)結(jié)構(gòu)需要升級或擴(kuò)展,又不想影響原有系統(tǒng)穩(wěn)定運(yùn)行的時(shí)候
2 轉(zhuǎn)換類之間的差別不是很大的時(shí)候
3 想創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)類或不可預(yù)見類協(xié)同工作的時(shí)候
五、類適配器模式和對象適配器模式的靜態(tài)類圖
關(guān)于“Java適配器模式應(yīng)用之電源適配器功能的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。