首页 > 其他分享 >初识设计模式 - 适配器模式

初识设计模式 - 适配器模式

时间:2022-09-30 08:22:04浏览次数:42  
标签:适配 适配器 接口 初识 模式 设计模式 adaptee

适配器在生活中经常见到,如手机、笔记本电脑的电源适配器,USB 转接头都是常见的适配器。

在设计模式当中,适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

在类适配器模式中,适配器与适配者之间是继承(实现)关系;在对象适配器模式中,适配器与适配者之间是关联关系。

具体实现

类适配器模式

典型的类适配器模式代码示例如下:

class Adapter extends Adaptee implements Target {
    public void request() {
        // 转发调用
        super.specificRequest();
    }
}

从上述的代码可以看出,典型的类适配器模式就是通过继承的方式,使用子类方法调用父类的方法,使用者在使用时面对的是适配器类而不是原始类。

对象适配器模式

典型的对象适配器模式代码示例如下:

class Adapter extends Target {
    // 维持一个对适配者的引用
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void request() {
        // 转发调用
        adaptee.specificRequest();
    }
}

代理、桥接、装饰器、适配器的区别

笼统地说,这 4 种设计模式可以称为 Wrapper 模式,也就是通过 Wrapper 类二次封装原始类。

尽管它们的代码结构类似,但这 4 种设计模式的用意完全不同,以下是它们简要描述:

  • 代理模式:代理类在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它与装饰器模式最大的不同
  • 桥接模式:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变
  • 装饰器模式:装饰器模式在不改变原始类接口的情况下,对原始类功能进行加强,并且支持多个装饰器的嵌套使用
  • 适配器模式:适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口,适配器模式是一种事后的补救策略

总结

优点

适配器模式的主要优点如下:

  • 将目标类和适配者类解耦
  • 增加了类的透明性和复用性
  • 灵活性和扩展性都非常好

除上述以外,对象适配器模式还有以下优点:

  • 一个对象适配器可以把多个不同的适配器适配到同一个目标
  • 可以适配一个适配者的子类

缺点

类适配器模式的主要缺点如下:

  • 对于不支持多重继承的编程语言,一次最多只能适配一个适配者类,不能同时适配多个适配者
  • 适配者类必须是可被继承的
  • 对于不支持多重继承的编程语言,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性

对象适配器模式的主要缺点如下:

  • 与类适配器模式相比,要在适配器中置换适配者类的某些方法比较麻烦

适用场景

适配器模式的适用场景如下:

  • 封装有缺陷的接口设计
  • 统一多个类的接口设计
  • 替换依赖的接口设计
  • 兼容老版本接口
  • 适配不同格式的数据

源码

在 Java 中,SLF4J 日志框架不仅仅提供了统一的接口定义,还提供了针对不同日志框架的适配器。对不同日志框架的接口进行二次封装,适配成统一的 SLF4J 接口定义。

标签:适配,适配器,接口,初识,模式,设计模式,adaptee
From: https://www.cnblogs.com/fatedeity/p/16743683.html

相关文章

  • 【转载】模式——使用MVVM设计模式的WPF程序开发
    原文:模式-具有模型-视图-视图模型设计模式|的WPF应用微软学习(microsoft.com)翻译:https://blog.csdn.net/weixin_37537723/article/details/106916294说明本文是笔......
  • 设计模式的七大原则
    设计模式之七大编程原则单一职责原则接口隔离原则依赖倒转原则里氏替换原则迪米特法则合成复用原则笔记总结来源于B站:B站尚硅谷——Java设计模式一、单一职责原......
  • 适配器模式
    适配器模式被适配目标接口packageadaptertypesourceinterface{SpecificRequest()string}被适配的目标packageadaptertypesourceImplstruct{}fu......
  • 【设计模式】29.结构型模式-装饰模式(Decorator)
    一、描述装饰模式能够在不改变原来对象结构和功能的前提下,动态的给对象增加新的功能,相比于使用子类扩展的方式,装饰模式更加的灵活。角色(1)抽象构件类:为具体构件类和装饰......
  • JS - 初识作用域
    作用域2022-09-29----------------全局作用域:函数之外声明的变量局部作用域:代码块里变量定义的位置-函数内外 - ES2015let:重新声明变量1{2le......
  • 行为型设计模式之观察者模式
    观察者模式观察者模式,又叫发布-订阅模式,它属于行为型模式。它是定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于......
  • 对《Head First设计模式》的更多赞誉
    ​​软件方法(下)分析和设计第8章连载[20210723更新]>>​​​​ErichGamma:我把它带到健身房-对《HeadFirst设计模式》的赞誉​​​​技术书籍也香艳-《HeadFirst设计模式》......
  • 设计模式之模板方法模式
    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考......
  • 初识设计模式 - 装饰器模式
    简介装饰器模式主要解决的问题是,如果使用子类继承的方式扩展一个类,随着扩展功能的增多,子类会非常膨胀,包括子类的数量或子类的方法数。装饰器模式其核心还是“用组合替代......
  • 大话设计模式--------第二章策略模式
    第二章策略模式策略模式的概念很好理解,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现,每个if判断都可以理解为一个策略。比如商场有三种客户,第一种打8折,......