九折技术 九折技术
首页
  • Go
  • MIT-6824
  • 算法与数据结构
  • 面向对象
  • 代码整洁
  • 重构
  • 设计模式
  • 学习
  • 技术
  • 人文
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub

HoldDie

长期有耐心,一切才刚刚开始!
首页
  • Go
  • MIT-6824
  • 算法与数据结构
  • 面向对象
  • 代码整洁
  • 重构
  • 设计模式
  • 学习
  • 技术
  • 人文
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub
  • 代码整洁

  • 重构

  • 设计模式

    • 创建型-单例模式
    • 创建型-工厂模式
    • 创建型-建造者模式
    • 创建型-原型模式
    • 结构型-代理模式
    • 结构型-桥接模式
    • 结构型-装饰器模式
    • 结构型-适配器模式
      • 结构型-门面模式
      • 结构型-组合模式
      • 结构型-享元模式
      • 行为型-观察者模式
      • 行为型-模板模式
      • 行为型-策略模式
      • 行为型-责任链模式
      • 行为型-状态模式
      • 行为型-迭代器模式
      • 行为型-访问者模式
      • 行为型-备忘录模式
      • 行为型-命令模式
      • 行为型-解释器模式
      • 行为型-中介模式
    • 架构
    • 设计模式
    holddie
    2020-08-31

    结构型-适配器模式

    # 什么是适配器模式

    • 英文名称:Adapter Design Pattern
    • 将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。
    • 适配器模式
      • 类适配器,使用继承关系来实现。
      • 对象适配器,使用组合关系来实现。
    • 使用区别
      • 如果 Adaptee 接口不多,上述两种方式都可以。
      • 如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分相同,我们使用类适配器方式。
      • 如果 Adaptee 接口很多,但是两者内部定义大部分不相同,那么推荐使用对象适配器。

    # 为什么用适配器模式

    • 封装有缺陷的接口设计
      • 适配器模式的应用场景是“接口不兼容”。
    • 统一多个类的接口设计
    • 替换依赖的外部系统
    • 兼容老版本接口
    • 适配不同格式的数据

    # 适配器应用场景

    • Slf4j 日志框架,只定义了接口,其中涉及到不同的日志适配。
    • 使用数组实现堆、栈功能,其实底层也是对应的适配操作。

    # 适配器示例代码

    public interface IVga {
      public void openVga();
    }
    
    public class VgaDisplay implements IVga {
      @Override
      public void openVga() {
        System.out.println("Openning ... VGA ... monitor");
      }
    }
    
    
    public interface IHdmi {
      public void openHdmi();
    }
    
    public class Vga2HdmiAdapter implements IHdmi {
    
      private IVga vga;
    
      public Vga2HdmiAdapter(IVga vga) {
        this.vga = vga;
      }
    
      @Override
      public void openHdmi() {
        vga.openVga();
        System.out.println("Openning HDMI device.....");
        System.out.println("适配完成");
      }
    
    }
    
    public class App {
      public static void main(String[] args) {
        System.out.println("Hello World!");
    
        VgaDisplay vgaDisplay = new VgaDisplay();
    
        Vga2HdmiAdapter vga2HdmiAdapter = new Vga2HdmiAdapter(vgaDisplay);
    
        operateHdmiLaptop(vga2HdmiAdapter);
    
      }
    
      private static void operateHdmiLaptop(Vga2HdmiAdapter vga2HdmiAdapter) {
        vga2HdmiAdapter.openHdmi();
        System.out.println("HDMI 显示器调用成功了");
      }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51

    # 代理、桥接、装饰器、适配器 4 种设计模式的区别

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

    ← 结构型-装饰器模式 结构型-门面模式→

    最近更新
    01
    行为型-访问者模式
    11-24
    02
    行为型-备忘录模式
    11-24
    03
    行为型-命令模式
    11-24
    更多文章>
    Theme by Vdoing | Copyright © 2019-2020 HoldDie | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式