美文网首页
05 设计模式之适配器模式

05 设计模式之适配器模式

作者: 滔滔逐浪 | 来源:发表于2022-06-22 21:38 被阅读0次

什么事适配器

1,适配器模式是一种结构型设计模式。适配器模式的思想是,把一个类的接口变化成客户所期待的另一种接口,从而使原因因接口不匹配而无法在一起工作的2个类能够在一起工作。
苹果手机是否可以插入 圆孔耳机,(圆孔)转接头(接入苹果口子)

  1. 适配器模式涉及3个角色
    源(Adaptee):需要被适配的对象或者类型,相当于插头。
    适配器(Adapter): 连接目标和源中间对象,相当于插头转换器。
    目标(Target):期待得到的目标,相当于插座
    适配器模式包括3种形式: 类适配器模式,对象适配器模式,接口适配器模式()

适配器模式应用场景:
1,springmvc多个不同的controller实现
2,API多版本控制
1,系统需要使用现有的类,而这些类的接口不符合系统的接口。
2,想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括可能在将来引进的类一起工作。
3,类所做的事情相同或者相似,但是有不同的接口实现的时候。
4,旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口形式访问,但是我们不希望手动更改原有类的时候。
5,使用第三方组件。组件定义接口和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
springmvc 适配器原理分析
方式一: @Controller/@RquestMapping
方式2: 实现HttpRequestHandler接口

方式三: 实现controller接口
适配器模式就是把一个类的接口替换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的2个类能够在一起工作

package com.taotao.adapter.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: wangjin
 * @CreateTime: 2022-06-26  21:26
 */
@RestController
public class TaoTaoController {
    @RequestMapping("/getTaotao")
    public String getTaotao(){
        return "taotao";
    }
}


package com.taotao.adapter.controller;

import org.springframework.stereotype.Component;
import org.springframework.web.HttpRequestHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @Author: wangjin
 * @CreateTime: 2022-06-26  21:28
 */
@Component("/taoTaoHttpRequestHandler")
public class TaoTaoHttpRequestHandler  implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        PrintWriter writer = httpServletResponse.getWriter();
        writer.print("mayiktHttpRequestHandler");
        writer.close();
    }
}


package com.taotao.adapter.controller;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

/**
 * @Author: wangjin
 * @CreateTime: 2022-06-26  21:32
 */
@Component("/implController")
public class TaoTaoImplController  implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        PrintWriter writer = response.getWriter();
        writer.print("TaoTaoImplController");
        writer.close();
        return null;
    }
}

package com.taotao.adapter.controller;


import com.taotao.adapter.controller.impl.AnnotationController;
import com.taotao.adapter.controller.impl.ImplController;
import com.taotao.adapter.controller.impl.RequestHandlerController;

/**
 * @author 余胜军
 * @ClassName AdapterInvok
 * @qq 644064779
 * @addres www.mayikt.com
 * 微信:yushengjun644
 */
public class AdapterInvok {
    public static void invok(Controller controller) {
        if (controller instanceof AnnotationController) {
            AnnotationController annotationController = (AnnotationController) controller;
            annotationController.handleRequest();
            return;
        }
        if (controller instanceof ImplController) {
            ImplController implController = (ImplController) controller;
            implController.handleRequest();
        }
        if (controller instanceof RequestHandlerController) {
            RequestHandlerController requestHandlerController = (RequestHandlerController) controller;
            requestHandlerController.requestHandler();
        }
        
    }

    public static void main(String[] args) {
        AdapterInvok.invok(new ImplController());
    }
}


适配器优缺点:
优点:
更好的复用性:系统需要使用现有的类,而此类的接口不符合系统的需要,那么通过适配器模式可以让这些功能得到更好的复用。
更好的扩展性:在实现适配器功能的时候,可以扩展自己源的行为(增加方法),从而自然的扩展系统的功能。
缺点:
会导致系统紊乱:滥用适配器,会让系统变得非常凌乱。例如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

相关文章

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式详解——适配器模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之适配器模式,Android设计模式源码解...

  • 设计模式之适配器模式

    设计模式之适配器模式 1. 模式定义 适配器模式又称包装器模式,属于结构型模式,它可以将一个接口转换成客户希望的另...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

网友评论

      本文标题:05 设计模式之适配器模式

      本文链接:https://www.haomeiwen.com/subject/jwnuvrtx.html