初识适配器模式

适配器模式


引入

**生活中的例子:**当我们使用手机充电时,充电器起到了转换器的作用,它将家用的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 原则。

相关推荐
JAVA坚守者2 天前
Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践
适配器模式·并发编程·jvm 调优·javacc·熔断机制·java 性能优化·jmh 测试
wjm04100613 天前
C++八股--5--设计模式--适配器模式,代理模式,观察者模式
c++·设计模式·适配器模式
催眠大树13 天前
适配器模式(Adapter Pattern)
java·开发语言·适配器模式
帝锦_li15 天前
Java进阶--设计模式
观察者模式·单例模式·代理模式·抽象工厂模式·适配器模式·原型模式
星星点点洲20 天前
【设计模式区别】装饰器模式和适配器模式区别
设计模式·适配器模式·装饰器模式
?abc!20 天前
设计模式基础概念(结构型模式):适配器模式(Adapter Pattern)
python·设计模式·适配器模式
碎梦归途22 天前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
不当菜虚困1 个月前
JAVA设计模式——(1)适配器模式
java·设计模式·适配器模式
十五年专注C++开发1 个月前
面试题:C++11在C++98基础上增加了哪些内容?
开发语言·c++·设计模式·面试·stl·适配器模式
编程侦探1 个月前
【设计模式】适配器模式:让不兼容的接口和谐共处
开发语言·c++·设计模式·适配器模式