Java适配器模式应用之电源适配器功能详解

时间:2022-10-30 09:55:36

本文实例讲述了java适配器模式应用之电源适配器功能。分享给大家供大家参考,具体如下:

一、模式定义

存在两种适配器模式

1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体。

2 类适配器模式,在这种适配器模式中,适配器继承自已实现的类。

二、模式举例

1 模式分析

我们借用笔计本电源适配器来说明这一模式。

已经存在的交流电源
笔记本电脑
电源适配器

Java适配器模式应用之电源适配器功能详解

2 适配器模式的静态建模

Java适配器模式应用之电源适配器功能详解

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适配器模式应用之电源适配器功能详解

希望本文所述对大家java程序设计有所帮助。

原文链接:https://blog.csdn.net/chengqiuming/article/details/70140542