适配器模式详解

适配器模式

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作

分类: 类适配器、对象适配器

优点:

  • 可以让任何两个没有关联的类一起运行
  • 提高了类的复用
  • 增加了类的透明度
  • 灵活性好

缺点:

  • 过多地使用适配器,会让系统非常零乱,不易整体进行把握。(例如我调用的命名是A接口,其内部却被适配成了B接口的实现)

使用场景:

  • 系统需要使用现有的类,而此类的接口不符合系统的需要
  • 通过接口转换,将一个类插入另一个类系中
  • 有动机地修改一个正常运行的系统的接口
  • 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能

使用实例:

FutureTask 实现了 Runnable 接口,组合了 Callable,可以使 Callable 与 Thread 组合使用

类适配器

假设我们原手机充电孔是 Type-B 充电孔,但现在没有只有一个 Type-C 的充电线,因此,需要将其进行适配

xx

原有接口

/**
 *  充电孔接口
 */
public interface ChargeHole {
    void setType();
}

原有接口实现

public class TypeB implements ChargeHole{
    @Override
    public void setType() {
        System.out.println("Type-B 充电插孔");
    }
}

新增功能类

public class TypeC {
    public void setTypeC() {
        System.out.println("Type-C 充电插孔");
    }
}

创建适配器

public class Adapter extends TypeC implements ChargeHole{
    @Override
    public void setType() {
        setTypeC();
    }
}

测试类及运行结果

public class Test {
    public static void main(String[] args) {
        // 原来的
        TypeB typeB = new TypeB();
        typeB.setType();
        // 适配后
        Adapter adapter = new Adapter();
        adapter.setType();
    }
}
-------------运行结果-----------------
Type-B 充电插孔
Type-C 充电插孔

对象适配器

还是原来的例子,这里只需要将适配器改为适配对象,并在测试端将对象传入即可
ss

适配器类

public class Adapter implements ChargeHole {
    private TypeC typeC;

    public Adapter(TypeC typeC){
        this.typeC = typeC;
    }


    @Override
    public void setType() {
        this.typeC.setTypeC();
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        // 原来的
        TypeB typeB = new TypeB();
        typeB.setType();
        // 适配后
        Adapter adapter = new Adapter(new TypeC());
        adapter.setType();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值