适配器模式
模式说明
结构
代码演示
package com.yukiyama.pattern.structure;
/**
* 适配器模式
*/
public class AdapterDemo {
public static void main(String[] args) {
// 使用非标准物件时,声明其适配器
Typec t1 = new AdapterB2C();
Typec t2 = new AdapterL2C();
// 通过调用对应适配器的标准方法,间接使用
// 输出“使用TypeB接口充电”
t1.typecCharge();
// 输出“使用TypeB接口传输数据”
t1.typecDataTrans();
// 输出“使用TypeB接口充电”
t2.typecCharge();
// 输出“使用TypeB接口传输数据”
t2.typecDataTrans();
}
}
/**
* 抽象目标类
* 定义抽象标准方法。
* 下例是Typec方式的充电方法和数据传输方法。
*/
abstract class Typec{
public abstract void typecCharge();
public abstract void typecDataTrans();
}
/**
* 抽象目标类的继承类
* 在本模式中不是必须的,只是为了展示无需适配的情况。
*/
class HuaweiTypeC extends Typec{
@Override
public void typecCharge() {
System.out.println("使用TypeC接口充电");
}
@Override
public void typecDataTrans() {
System.out.println("使用TypeC接口传输数据");
}
}
/**
* 被适配类(需要适配的类)
* 有与目标类相同功能的方法,但接口(方法名)不符合标准接口(与目标类内定义
* 的方法的方法名不同)。
* 下例是Typeb类,使用Typeb方式的充电和数据传输方法。
*/
class Typeb{
public void typebCharge() {
System.out.println("使用TypeB接口充电");
}
public void typebDataTrans() {
System.out.println("使用TypeB接口传输数据");
}
}
/**
* 适配器类
* 继承目标抽象类,内部持有一个被适配类实例,实现目标抽象类的抽象方法,在
* 方法内部调用其持有的被适配类的原有方法。
* 下例是Typeb转Typec的适配器。
*/
class AdapterB2C extends Typec{
Typeb typeb = new Typeb();
@Override
public void typecCharge() {
typeb.typebCharge();
}
@Override
public void typecDataTrans() {
typeb.typebDataTrans();
}
}
/**
* 被适配类(需要适配的类)
* 下例是Lightning类,使用Lightning方式的充电和数据传输方法。
*/
class Lightning{
public void lightningCharge() {
System.out.println("使用Lightning接口充电");
}
public void lightningDataTrans() {
System.out.println("使用Lightning接口传输数据");
}
}
/**
* 适配器类
* 下例是Lightning转Typec的适配器。
*/
class AdapterL2C extends Typec{
Lightning ln = new Lightning();
@Override
public void typecCharge() {
ln.lightningCharge();;
}
@Override
public void typecDataTrans() {
ln.lightningDataTrans();
}
}Last updated