Java適配器模式應(yīng)用之電源適配器功能詳解
本文實(shí)例講述了Java適配器模式應(yīng)用之電源適配器功能。分享給大家供大家參考,具體如下:
一、模式定義
存在兩種適配器模式
1 對(duì)象適配器模式,在這種適配器模式中,適配器容納一個(gè)它包裹的類對(duì)象的物理實(shí)體。
2 類適配器模式,在這種適配器模式中,適配器繼承自已實(shí)現(xiàn)的類。
二、模式舉例
1 模式分析
我們借用筆計(jì)本電源適配器來(lái)說(shuō)明這一模式。
已經(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電源對(duì)象適配器
package com.demo.adapter;
import com.demo.power.AbsBasePower;
import com.demo.power.v12.IPower12;
/**
* 電源適配器 (實(shí)現(xiàn)目標(biāo)對(duì)象接口 即:12V電源接口)
*
* @author
*
*/
public class AdapterPower12 implements IPower12 {
// 待轉(zhuǎn)換的對(duì)象
private final AbsBasePower absBasePower;
// 適配器構(gòu)造方法 將待轉(zhuǎn)換對(duì)象傳入
public AdapterPower12(AbsBasePower absBasePower) {
this.absBasePower = absBasePower;
}
// 實(shí)現(xiàn)目標(biāo)對(duì)象方法
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)對(duì)象接口 即:12V電源接口) 類適配器 模式
*
* @author
*
*/
public class AdapterPower12Ext extends AbsBasePower implements IPower12 {
// 適配器構(gòu)造方法 將待轉(zhuǎn)換對(duì)象傳入
public AdapterPower12Ext(AbsBasePower absBasePower) {
super(absBasePower.getPower());
}
// 實(shí)現(xiàn)目標(biāo)對(duì)象方法
@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 測(cè)試適配器
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) {
// 我們首先 生成一個(gè)220V電源對(duì)象!
Power220 power220 = new Power220();
power220.output220v();
// 接下來(lái),我們?cè)谏梢粋€(gè)12V電源對(duì)象!
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使用對(duì)象組合,面向接口和抽象編程
2“開一閉”原則
四、使用場(chǎng)合
1 軟件系統(tǒng)結(jié)構(gòu)需要升級(jí)或擴(kuò)展,又不想影響原有系統(tǒng)穩(wěn)定運(yùn)行的時(shí)候
2 轉(zhuǎn)換類之間的差別不是很大的時(shí)候
3 想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)類或不可預(yù)見(jiàn)類協(xié)同工作的時(shí)候
五、類適配器模式和對(duì)象適配器模式的靜態(tài)類圖

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
RocketMQ實(shí)現(xiàn)消息分發(fā)的步驟
RocketMQ 實(shí)現(xiàn)消息分發(fā)的核心機(jī)制是通過(guò) Topic、Queue 和 Consumer Group 的配合實(shí)現(xiàn)的,下面給大家介紹RocketMQ實(shí)現(xiàn)消息分發(fā)的步驟,感興趣的朋友一起看看吧2024-03-03
Java中內(nèi)部類使用方法實(shí)戰(zhàn)案例分析
這篇文章主要介紹了Java中內(nèi)部類使用方法,結(jié)合具體案例形式分析了Java內(nèi)部類原理、調(diào)用方法及相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2019-09-09
Java中String判斷值為null或空及地址是否相等的問(wèn)題
這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問(wèn)題,文中舉了簡(jiǎn)單的例子對(duì)字符串類型的值和地址問(wèn)題進(jìn)行講解,需要的朋友可以參考下2016-01-01
使用maven實(shí)現(xiàn)有關(guān)Jsoup簡(jiǎn)單爬蟲的步驟
這篇文章主要介紹了使用maven實(shí)現(xiàn)有關(guān)Jsoup簡(jiǎn)單爬蟲的步驟,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
SpringBoot實(shí)現(xiàn)PDF添加水印的示例
本文主要介紹了SpringBoot實(shí)現(xiàn)PDF添加水印的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
SpringMVC中處理靜態(tài)資源的過(guò)程詳解
本文給大家介紹SpringMVC中處理靜態(tài)資源的過(guò)程,結(jié)合示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
Spring中事務(wù)管理的四種方法(銀行轉(zhuǎn)賬為例)
這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)管理的四種方法,文中是以銀行轉(zhuǎn)賬為例,通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05

