设计模式之适配器模式

目的

将一个类的接口转换成客户希望的另一个接口

适用场景

  • 使用一个已存在的类,而它的接口不符合要求
  • 创建一个可以复用的类,该类可以与其他不相关的类或不可预
    见的类(即那些接口可能不一定兼容的类)协同工作
  • 使用一些已经存在的子类,但不可能通过子类化以匹配各自接
    口。对象适配器可以适配它的父类接口

角色

Client:代表引用用户期望接口的类
Target:顾名思义,就是用户所期望的接口
Adapter:实现适配功能的具体类
Adaptee:系统原先的接口,而这个接口并不符合需求。

适配器

类适配器

在这里插入图片描述代码示例:

//Target:定义Client使用的与特定领域相关的接口
public interface Target
{ void request(); }
//Adaptee:现在需要适配的已经存在的接口
public class Adaptee
{ public void specificRequest(){} }
//Adapter:对Adaptee 的接口与Target接口进行适配
public class Adapter extends Adaptee implements Target
{
public void request() {
super. specificRequest();
}
}

用一个具体的Adapter类对Adaptee和Target进行匹配, Adapter类多重继承(Java体现为实现接口)Adaptee和Target类。

Adapter可重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类

如图上代码所示,我们可以看出,完成类适配模式,只需如下几步:

  1. 完成Target、Adaptee接口编写工作
  2. 编写Adapter适配器,继承类实现接口,然后重写目标接口的函数。

对象适配器

在这里插入图片描述
代码示例:

//Target:定义Client使用的与特定领域相关的接口
public interface Target
{ void request(); }
//Adaptee:现在需要适配的已经存在的接口
public class Adaptee
{ public void specificRequest(){} }
//Adapter:对Adaptee 的接口与Target接口进行适配
public class Adapter implements Target
{
public Adapter(Adaptee adaptee)
{ super(); this.adaptee = adaptee; }
public void request()
{ adaptee.specificRequest(); }
private Adaptee adaptee;
}

允许一个Adapter与多个Adaptee同时工作,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。 Adapter可以一次给所有的Adaptee添加功能

使用组合,不仅可以适配某个类,也可以适配该类的任何子类

我们可以看到类适配器与对象适配器实现区别在于Adapter和Adaptee的关系,我们在使用过程中更倾向于使用对象适配器,原因在对象适配器具有更高灵活性,能够对多个Adaptee进行适配,更加便捷。

效果

  • 总体
    将目标类和适配者类解耦
    增加了类的透明性和复用性
    灵活性和扩展性好
  • 类适配器模式(继承)
    属于静态结构 ,由于只能单继承
  • 对象适配器(委托)
    可以把多个不同的适配者适配到同一个目标
    实现过程较为复杂
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值