21.适配器模式-接口适配器模式
2019-12-15 本文已影响0人
测试员
UML
接口适配器模式代码实现
需要被适配的类【电源】(普通类)可以扩展成抽象类
抽象适配类【充电器】(抽象类)
适配类1【新充电器】(继承充电器抽象类的普通类)
适配类2【旧充电器】(继承充电器抽象类的普通类)
定义适配功能的接口【变压器功能】(接口)
需要用到适配功能的类【手机-充电时】(普通类)
测试类【AdapterTest】
需要被适配的类【电源】
package com.yuan.dp.adapter;
/**
* 提供电源
* @author Yuan-9826
*/
public class 电源 {
/**
* 提供的电源
*/
private int POWER = 220;
public int getPOWER() {
return POWER;
}
}
抽象适配类【抽象充电器】
package com.yuan.dp.adapter;
/**
* 充电器实现类
*
* @author Yuan-9826
*/
public abstract class 充电器 implements 充电功能接口 {
/**
* 被适配对象
*/
private 电源 powerSupply;
public 充电器(电源 powerSupply) {
this.powerSupply = powerSupply;
}
/**
*
* @return 输出电压
*/
@Override
public int 变压(){
System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
try {
Thread.sleep(1000);
System.out.println("经过了很复杂的处理......");
Thread.sleep(1000);
int newPower = 5;
System.out.println("输出的电压是 " + newPower + "伏");
return newPower;
} catch (InterruptedException e) {
e.printStackTrace();
}
return -1;
}
/**
*
* @return 输出电流
*/
@Override
public int 快冲(){
System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
System.out.println("老式充电器不支持快充默认输出 3 安");
return 3;
}
}
适配类1【新充电器】
package com.yuan.dp.adapter;
/**
* 新式充电器
*
* @author Yuan-9826
*/
public class 新式充电器 extends 充电器 {
/**
* 被适配对象
*/
private 电源 powerSupply;
public 新式充电器(电源 powerSupply) {
super(powerSupply);
this.powerSupply = powerSupply;
}
/**
*
* @return 输出电压
*/
@Override
public int 变压(){
System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
try {
Thread.sleep(1000);
System.out.println("经过了很复杂的处理......");
Thread.sleep(1000);
int newPower = 5;
System.out.println("输出的电压是 " + newPower + "伏");
return newPower;
} catch (InterruptedException e) {
e.printStackTrace();
}
return -1;
}
/**
*
* @return 输出电流
*/
@Override
public int 快冲(){
System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
System.out.println("新式充电器支持快充哒~ 输出 6 安");
return 6;
}
}
适配类2【旧充电器】
package com.yuan.dp.adapter;
/**
* 老式充电器:只具备基本充电器方法
* @author Yuan-9826
*/
public class 老式充电器 extends 充电器{
/**
* 被适配对象
*/
private 电源 powerSupply;
public 老式充电器(电源 powerSupply) {
super(powerSupply);
this.powerSupply = powerSupply;
}
}
定义适配功能的接口【变压器功能】
package com.yuan.dp.adapter;
/**
* 定义充电器应有的功能
* @author Yuan-9826
*/
public interface 充电功能接口 {
/**
*
* @return 输出电压
*/
int 变压();
/**
*
* @return 输出电流
*/
int 快冲();
}
需要用到适配功能的类【手机-充电时】
package com.yuan.dp.adapter;
/**
* 手机需要充电 需要直连电源充电
*
* @author Yuan-9826
*/
public class 手机 {
充电器 charger;
public 手机(充电器 charger) {
this.charger = charger;
}
/**
* 充电方法
*/
void charge() {
//输出电压
int power = charger.变压();
//输出电流
int an = charger.快冲();
//电压>5 或 <5都是不正常 要抛出异常
if (power > 5) {
System.out.println("充电电压 > 5V,手机爆炸了");
} else if (power < 5) {
System.out.println("充电电压 < 5V,手机依然没电");
} else {
//电压正常时判断电流是不是快充
if (an < 6) {
System.out.println("手机用5伏电压正常充电啦~");
} else {
System.out.println("手机用5伏电压快速充电啦~");
}
}
}
}
测试类【AdapterTest】
package com.yuan.dp.adapter;
public class AdapterTest {
public static void main(String[] args) {
/**
* 自带220v电压
*/
电源 powerSupply = new 电源();
充电器 newCharger = new 新式充电器(powerSupply);
手机 phone_1 = new 手机(newCharger);
phone_1.charge();
System.out.println("----------------------------------------");
充电器 oldCharger = new 老式充电器(powerSupply);
手机 phone_2 = new 手机(oldCharger);
phone_2.charge();
}
}