本文实例讲述了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