初识适配器模式

适配器模式


引入

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

相关推荐
阳光开朗_大男孩儿15 小时前
组合模式和适配器模式的区别
设计模式·组合模式·适配器模式
捕鲸叉1 天前
C++结构型设计模式之适配器模式概述
c++·设计模式·适配器模式
捕鲸叉2 天前
C++设计模式之适配器模式与桥接模式,装饰器模式及代理模式相似点与不同点
设计模式·桥接模式·适配器模式·装饰器模式
菜菜-plus3 天前
java设计模式之 - 适配器模式
java·设计模式·适配器模式
DyingLive3 天前
设计模式-Adapter(适配器模式)GO语言版本
设计模式·适配器模式
hxj..3 天前
【设计模式】适配器模式
java·设计模式·适配器模式
932我5 天前
C++中的适配器模式
java·开发语言·适配器模式
jjjxxxhhh1237 天前
c++设计模式之适配器模式
c++·设计模式·适配器模式
gjh12088 天前
单例模式和适配器模式的简单介绍
单例模式·适配器模式
南城花随雪。13 天前
Spring框架之适配器模式 (Adapter Pattern)
java·开发语言·适配器模式