Java设计模式—适配器模式

适配器模式

仅为记录,仅供参考

对象器模式结构

Target(目标抽象类)目标抽象类定义客户所需要的接口,可以是一个抽象类或者接口,也可以是具体类。
Adapter(适配器类)可以调用另一个接口,作为一个转换器
Adapter(适配者类)定义了一个已经存在的接口,这个接口需要适配,一般是具体类,包含了客户希望使用的方法

为什么要学这个模式?
因为比如你想用一个方法,但是你里面已经定义了接口,而且你没法直接把代码拿过来改。
所以你可能会想到,继承,继承了它你就什么都有了,就是类适配器。或者你还可以只调用它的方法。这是对象适配器

适配器分类

类适配器

类适配器类图

类适配器因为要继承适配者类,在 Java里面不允许多重继承,所以只能实现接口,而不能继承类。而且只能继承一个适配者类。

对象适配器

对象适配器类图

对象适配器通过关联适配者类,然后再实现接口,也可以继承类。

缺省适配器

缺省适配器类图

用途?
当你想要一个接口里面的某一个或者只是其中几个方法,如果你直接实现这个接口。还要为其他的方法也写一个默认实现。你有可能会想到,如果你用一个类去继承一个类,这个类可以是抽象类,也可以是具体类。你并不需要给里面所有的方法都提供一个实现。所以你可以选择建一个抽象类去继承这个接口。抽象类对这个接口的所有方法都给个默认实现,然后你再用一个类去继承这个抽象类,对你想要实现的方法写个实现就可。
用途:简化了代码?

双向适配器

双向适配器类图

用途?
当目标类需要调用适配者类里面的方法,适配者类也需要调用目标类里面的方法。某种角度来说就是它们互为适配者类
思路:我们先试试考虑在目标类中能够使用适配者类的方法,能够用类适配器或对象适配器实现。那我们该如何在适配者类中也能使用到目标类的方法呢?我们把原来的目标类和原来的适配器类互换行不行?适配器类实现或继承适配者类,然后再关联目标类。
假如我们刚开始使用的是类适配器,也就是适配器类实现目标类,继承适配者类。现在要把原适配者类当作目标类,所以适配器类实现原适配者类。然后还要把原目标类当成适配者类,因为Java不支持多重继承,适配器类要关联原目标类。
假如我们开始使用的是对象适配器。适配器类关联适配者类,然后实现目标类。现在把原适配者类当作目标类,所以适配器类实现原适配者类。然后把原目标类当成适配者类,你可以选择用适配器类去关联原目标类,也可以去继承原目标类。
总结:所以我们这里一共有两种可能,因为有两种方法重复了。

适配器模式的优点

  1. 将目标类与适配器解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
  2. 增加了类的透明性和复用性。将具体的业务实现过程封装到适配者类中
  3. 灵活性和扩展性非常好。可以通过修改配置文件很方便地更换适配器

对象适配器模式还有以下优点:

  1. 一个对象适配器可以把多个不同的适配者适配到一个目标。(因为它是通过关联,可以关联多个适配者类)
  2. 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据里氏代换原则,适配者的子类也可通过该适配器进行适配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值