本文實例講述了java適配器模式應用之電源適配器功能。分享給大家供大家參考,具體如下:
一、模式定義
存在兩種適配器模式
1 對象適配器模式,在這種適配器模式中,適配器容納一個它包裹的類對象的物理實體。
2 類適配器模式,在這種適配器模式中,適配器繼承自已實現的類。
二、模式舉例
1 模式分析
我們借用筆計本電源適配器來說明這一模式。
已經存在的交流電源
筆記本電腦
電源適配器
2 適配器模式的靜態建模
3 代碼舉例
3.1 抽象電源建立
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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電源接口
1
2
3
4
5
6
7
8
9
10
11
|
package com.demo.power.v220; /** * 220v 電源接口 * * @author * */ public interface ipower220 { // 220v交流電源打印 public void output220v(); } |
3.3 220v電源實現類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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電源接口
1
2
3
4
5
6
7
8
9
10
11
|
package com.demo.power.v12; /** * 12v 電源接口 * * @author * */ public interface ipower12 { // 12v電源打印 public void output12v(); } |
3.5 12v電源實現類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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電源對象適配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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電源類適配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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 測試適配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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程序設計有所幫助。
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/70140542