初识适配器模式

适配器模式


引入

**生活中的例子:**当我们使用手机充电时,充电器起到了转换器的作用,它将家用的220伏特电压转换成适合手机充电的5伏特电压。

适配器模式的三种类型

命名原则:适配器的命名应基于资源如何传递给适配器来进行。

  1. 类适配器模式:这种方式直接通过类实现。在适配器(Adapter)中,源(src)被当做一个类直接继承。
  2. 对象适配器模式:这种方式通过持有对象来实现。在适配器(Adapter)中,源(src)作为一个对象被持有。
  3. 接口适配器模式:这种方式通过实现接口来应用。在适配器(Adapter)中,源(src)作为一个接口被实现。
具体代码示例
类适配器模式类图

类适配器模式

java 复制代码
package com.lucifer.A07_Adapter.classAdapter;
//适配器
public class voltageAdapter extends voltage220v implements Ivoltage5v{
    public int output5v() {
        int src = output220v();
        int dst = src/44;
        return dst;
    }
}

缺点:使用了继承,且适配器中有src,增加使用成本

对象适配器模式

java 复制代码
package com.lucifer.A07_Adapter.objectAdapter;
//适配器
public class voltageAdapter implements Ivoltage5v {
    private voltage220v voltage220v;
    //通过构造器传入--聚合关系
    public voltageAdapter(com.lucifer.A07_Adapter.objectAdapter.voltage220v voltage220v) {
        this.voltage220v = voltage220v;
    }
    public int output5v() {
        int dst = 0;
        if(null!=voltage220v){
            int src = voltage220v.output220v();
            System.out.println("使用对象适配器进行转化");
            dst = src/44;
            System.out.println("适配完成");
            return dst;
        }else {
            return 0;
        }
    }
}

采用了合成复用原则(泛化->聚合)

接口适配器模式

java 复制代码
package com.lucifer.A07_Adapter.interfaceAdapter;

public class client_m1 {
    public static void main(String[] args) {
        absAdatpter absAdatpter = new absAdatpter(){
          //只需要关系需要使用的方法
          public void m1(){
              System.out.println("使用了m1的方法");
          }
        };
        absAdatpter.m1();
    }
}
在源码里面的使用
  1. SpringMvc 中的 HandlerAdapter, 就使用了适配器模式

  2. 使用 HandlerAdapter 的原因分析:

可以看到处理器的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用 Controller 方

法,需要调用的时候就得不断是使用 if else 来进行判断是哪一种子类然后执行。那么如果后面要扩展 Controller,

就得修改原来的代码,这样违背了 OCP 原则。

相关推荐
越甲八千2 天前
重拾设计模式-外观模式和适配器模式的异同
设计模式·适配器模式·外观模式
越甲八千2 天前
重拾设计模式--适配器模式
设计模式·适配器模式
诸葛悠闲6 天前
设计模式——适配器模式
设计模式·适配器模式
西岭千秋雪_6 天前
设计模式の建造者&适配器&桥接模式
java·设计模式·建造者模式·桥接模式·适配器模式
Jack_abu8 天前
设计模式学习之——适配器模式
设计模式·适配器模式
lzz的编码时刻13 天前
适配器模式 (Adapter) · 对象适配器 · 类适配器 · 实际开发中的应用
java·开发语言·适配器模式
夜空晚星灿烂17 天前
C#设计模式--适配器模式(Adapter Pattern)
设计模式·c#·适配器模式
Theodore_102217 天前
16 设计模式之适配器模式(充电器转换案例)
java·开发语言·算法·设计模式·java-ee·适配器模式
岳轩子24 天前
23种设计模式之适配器模式
java·设计模式·适配器模式
折腾的小飞24 天前
设计模式-适配器模式-注册器模式
java·设计模式·适配器模式·注册器模式