設(shè)計模式之適配器模式
來源:程序員人生 發(fā)布時間:2014-12-16 08:31:25 閱讀次數(shù):2942次
適配器模式,這個設(shè)計模式很好理解,由于在生活中實在是太常見了。比如電源適配器,插座提供1個220v的電壓,而我的電腦用19v的電壓,arm用5v的電壓。如果目標很少,電源可以給你定制1個電壓,但當需求電壓很多的時候就沒辦法去提供各種各樣的需求了,此時電源適配器就派上用處了,通過1個適配,輕松獲得需求的電壓。類似的還有翻譯,比如某個網(wǎng)站提供的是通用的英語原文,而用戶只懂中文,就需要1個翻譯官充當適配器的作用去做適配。
適配器模式,在我們的學習進程中,處處可見,比如C++的stack/queue就是所謂的適配器容器,用戶有很多這樣的需求,有1個雙端隊列提供了這個功能,但接口其實不是用戶想要的接口,通過stack這類適配器去做相應(yīng)的轉(zhuǎn)換就能夠了。在android中,適配器就更常見了,比如listview上需要各種數(shù)據(jù),但是這些數(shù)據(jù)本身并沒有提供對應(yīng)的接口,所以需要各種適配器去封裝這些數(shù)據(jù),然后供listview使用。
前面大概說了下利用,下面說點適配器中的角色(僅以電源適配器為例:
(1)目標Target: arm,arm運行需要5v的電壓;
(2)待適配的類Adaptee(源類):可以提供220v的電壓,其實不能滿足目標的需求;
(3)適配器(Adapter):電源適配器,將220v的電壓轉(zhuǎn)換成5v的電壓。
適配器分為類適配器模式和對象適配器模式,可以將1個系統(tǒng)的接口和本來不相容 的另外一個系統(tǒng)的類聯(lián)系起來,從而使得這兩個雷能夠1起工作,強調(diào)了對接口的轉(zhuǎn)換。
UML還是自己畫吧,我太懶了,自己手畫的。。。
----------------------------------------------------------------------------------
下面講講實現(xiàn)的源碼,JAVA:
待適配的源類:
//PowerSouce.java
package org.uestc.adapter;
public class PowerSource {
private int voltage;
public void SetDianya(int v) {
voltage = v;
System.out.println("我提供的電壓是:"+voltage);
}
public int GetVoltage() {
return voltage;
}
}
適配器:
//Adapter.java
package org.uestc.adapter;
import org.uestc.adapter.PowerSource;;
public class Adapter {
private PowerSource powerSource;
public Adapter(PowerSource powerSource) {
this.powerSource = powerSource;
}
public int voltageSwitch() {
int intpuDianya = powerSource.GetVoltage();
System.out.println("現(xiàn)在開始進行電壓轉(zhuǎn)換.....");
int outputDianya = 5;
return outputDianya;
}
}
目標類:
//Arm.java
package org.uestc.adapter;
public class Arm {
private int voltage;
public void inputDianya(int v) {
voltage = v;
}
public void run() {
if(voltage== 5) {
System.out.println("arm正常運行");
} else {
System.out.println("輸入電壓不正常不能開機運行");
}
}
}
客戶端測試:
//client.java
package org.uestc.adapter;
import org.uestc.adapter.PowerSource;;
public class Client {
public static void main(String []args) {
PowerSource powerSource = new PowerSource();
powerSource.SetDianya(220);
Adapter adapter = new Adapter(powerSource);
Arm arm = new Arm();
arm.inputDianya(adapter.voltageSwitch());
arm.run();
}
}
運行結(jié)果:
我提供的電壓是:220
現(xiàn)在開始進行電壓轉(zhuǎn)換
arm正常運行
PS:
參考帖子:點擊打開鏈接
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈