[01][01][08] 适配器模式详解

[TOC]

1. 定义

适配器模式是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作

2. 适用场景

  • 已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况
  • 适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案

3. 代码实现

3.1 原接口类

package com.zhunongyun.toalibaba.designpatterns.adapter.poweradapter;

public class AC220 {

    public int outputAC220() {
        int output = 220;
        System.out.println("输出电压" + output + "V");
        return output;
    }
}

3.2 适配器类

public interface DC5 {
    /**
     * 输出5V电压
     * @return
     */
    int outputDC5();
}
package com.zhunongyun.toalibaba.designpatterns.adapter.poweradapter;

public class PowerAdapter implements DC5 {

    private AC220 ac220;

    public PowerAdapter(AC220 ac220) {
        this.ac220 = ac220;
    }

    /**
     * 输出5V电压
     *
     * @return
     */
    @Override
    public int outputDC5() {
        int adapterInput = ac220.outputAC220();

        int adapterOutput = adapterInput / 44;

        System.out.println("使用PowerAdapter将输入AC: " + adapterInput + "V, 输出DC: " + adapterOutput + "V");
        return adapterOutput;
    }
}

3.3 测试类

package com.zhunongyun.toalibaba.designpatterns.adapter.poweradapter;

public class PowerAdapterTest {
    public static void main(String[] args) {
        DC5 dc5 = new PowerAdapter(new AC220());
        dc5.outputDC5();
    }
}

4. 源码分析

4.1 Spring的HandlerAdapter

五个实现类

  • AbstractHandlerMethodAdapter
  • SimpleControllerHandlerAdapter
  • HttpRequestHandlerAdapter
  • SimpleServletHandlerAdapter
  • RequestMappingHandlerAdapter
package org.springframework.web.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;

public interface HandlerAdapter {
    boolean supports(Object var1);

    @Nullable
    ModelAndView handle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;

    long getLastModified(HttpServletRequest var1, Object var2);
}

5. 优缺点

5.1 优点

  • 能提高类的透明性和复用,现有的类复用但不需要改变
  • 目标类和适配器类解耦,提高程序的扩展性
  • 在很多业务场景中符合开闭原则

5.2 缺点

  • 适配器编写过程需要全面考虑,可能会增加系统的复杂性
  • 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱
发布了29 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/csharpqiuqiu/article/details/100057207