Adapter(适配器)模式

Adapter 模式是一个常用的模式,它可以与其他很多模式共同使用

Adapter模式的意图是 将一个类的接口转换成希望的另外一种接口,Adapter模式使原本由接口不兼容而不能一起工作的那一些类可以起工作,就是说 需要一种方法,为一个内容合适但接口不配的对象创建一个新的接口,这样把一个类的接口转换成客户端所期待的另一个接口,从而使原接口不匹配而无法在一起工作的两个类能在一起工作


意图:将一个无法控制的现有对象与一个特定的接口相匹配
问题:一个系统拥有正确的数据行为,但接口却是错误的,典型用途:必须把某些东西实现为定义或已经拥有的抽象类的派生类
角色:目标(定义一个客户端使用特定接口)、客户(使用目标接口与和目标接口一致的对象合作)、被适配者(一个现存需要匹配的接口)、适配器(负责将接口转换成目标)
解决方案:Adapter模式用需要的接口对无法修改的类进行包装
参与者与协作者:Adapter 对 Adaptee 的接口进行适配,使它与Target(Adapter派生自它)相匹配。让 Client 把 Adaptee 当作 Target 的一个类型来使用它
效果:Adapter 模式让现存的对象适应新的结构,而不受接口的限制
实现:将现存的类包含在另一个类之中。包容类与需要的接口相匹配,并调用被包容类的方法

许多模式都要求某些特定的派生自同一个类,如果已经有现存的类,可以用 Adapter模式将它与适当的抽象类相适配

Adapter模式有两种用类型:
1> 对象 Adapter 模式:使用 Adapter模式叫做对象Adapter模式,因为它依赖于一个对象(适配对象)包含另一个对象(被适配对象)
2> 类 Adapter 模式:实现 Adapter模式的另一种方法是使用多重继承,在这种情况下,它被称为类 Adapter模式

Facade模式 与 Adapter模式的比较

Adapter模式将接口转换成另一个现有的接口

如,示例代码:
public interface XmlReader {
    public InputStream xmlReader();
}

public interface ReaderXml {
    public InputStream readerXml();
}

public class B implements ReaderXml {
    @Override
    public InputStream readerXml() {
        return null ;
    }
}

public class Adapter1 extends B implements XmlReader {
    @Override
    public InputStream xmlReader() {
        return readerXml();
    }
}

public class Adapter2 implements XmlReader {
    ReaderXml b = new B();
    @Override
    public InputStream xmlReader() {
        return b .readerXml();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值