zoukankan      html  css  js  c++  java
  • 设计模式-5适配器模式

    适配器模式

    基本介绍

    • 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)
    • 适配器模式属于结构型模式(调节结构的)
    • 主要分为三类:
      • 类适配器模式
      • 对象适配器模式
      • 接口适配器模式

    适配器模式的工作原理

    • 适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容
    • 使用户的角度看不到被适配者,是解耦的
    • 用户调用适配器转化出来的目标接口方法,适配器再去调用被适配者的相关接口方法
    • 用户收到反馈结果,感觉只适合目标接口交互

    类适配器模式

    ​ 被适配的类不满足现有类的需要,需要定义一个接口,让适配器来继承被适配者和接口(接口定义了转换的方法),适配器来实现接口的方法,现有类需要使用到被适配者的时候,需要传入一个接口类对象,然后使用接口类的子类(适配器类),调用适配器对象的转换方法,实现转换

    1、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。 2、src类的方法在Adapter中都会暴露出来,增加了使用的成本

    对象适配器

    1. 在类适配器上加以修改,不再继承src,而是持有src类的实例,解决兼容问题

    2. 在系统中尽量使用关联关系来代替继承关系

    3. 对象适配器是适配器模式中常用的一种

    通过adapter中的构造器传入一个被适配类的对象

    注意事项和细节
    • 对象适配器和类适配器算是同一种思想,实现方法不同而已,根据合成复用原则,将原本的继承改为组合,解决了类适配器必须继承src类的局限性,也不再要求dst必须是接口
    • 成本更低,更灵活

    接口适配器模式

    • 适配器模式(Default) 或者叫做 缺省适配器模式
    • 当不需要全部实现接口提供的方法是,可显示设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求
    • 适用于一个接口不想使用其所有的方法的情况

    优点:1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好(Adapter),重写了src的方法。

    缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

    使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

    注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

  • 相关阅读:
    根据对象中某个元素进行排序
    Bootstrap 弹出框(Popover)插件
    echarts+bmap 去掉地图左下角的logo
    get提交参数中存在空格
    long类型的转换为正常时间格式遇到的问题
    jQuery validate使用过程中遇到的问题
    问题 G: 最长公共子串问题
    1567. 乘积为正数的最长子数组长度(dp)
    C. Parsa's Humongous Tree(树形dp)
    1558. 得到目标数组的最少函数调用次数
  • 原文地址:https://www.cnblogs.com/lovestart/p/11253068.html
Copyright © 2011-2022 走看看