认识适配器模式

适配器模式

认识适配器模式

什么是适配器模式?

将一个接口转换成用户希望的接口,使得接口不相容的类可以一起工作。

角色有那些?

  • Target(目标角色类)
  • Client (客户端角色类)
  • Adapter(适配器类)
  • Adaptee(被适配角色类)

适配器模式

  • 类的适配器模式(采用继承实现)

  • 对象适配器(采用对象组合方式实现)

适配器模式优缺点

优点:
  • 将目标类和适配者类解耦
  • 将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
缺点:
  • 对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口
案例

方法1:采用继承实现(类适配器,单继承)

package com.model.adapter;
/**
 * 要被适配的类 网线
 */
public class Adaptee {
    public  void request(){
        System.out.println("连接网线上网");
    }
}
package com.model.adapter;

/**
 * 适配器:  连接电脑,连接网线
 */
public class Adapter extends Adaptee implements NetToUsb{

    public void HandlerRequest() {
        super.request();
    }
}

package com.model.adapter;
/**
 * 接口转换器的抽象实现
 */
public interface NetToUsb {
    /**
     * 作用:处理请求,使得网线能插入上网
     */
    public void HandlerRequest();
}
package com.model.adapter;

/**
 * 客户端类:插不上网线,无法上网
 */
public class Computer {
    //电脑需要连上适配器才能上网
    public void net(NetToUsb netToUsb) {
        netToUsb.HandlerRequest();
    }

    public static void main(String[] args) {
        //电脑 适配器 网线
        Computer computer = new Computer();
        Adaptee adaptee = new Adaptee();
        Adapter adapter = new Adapter();
        computer.net(adapter);

    }
}

方法2:采用组合方式实现

package com.model.adapter;

/**
 * 适配器:  连接电脑,连接网线
 */
public class Adapter2 implements NetToUsb{
    //采用组合方式实现
    private Adaptee adaptee;

    public Adapter2(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void HandlerRequest() {
        adaptee.request();
    }
}
public class Computer {
    //电脑需要连上适配器才能上网
    public void net(NetToUsb netToUsb) {
        netToUsb.HandlerRequest();
    }

    public static void main(String[] args) {
        //电脑 适配器 网线
        Computer computer = new Computer();
        Adaptee adaptee = new Adaptee();
        Adapter adapter = new Adapter();

        Adapter2 a = new Adapter2(adaptee);
        computer.net(adapter);

    }

结果:

认识适配器模式

适配器模式在spring 中的应用

1.适配器在Spring MVC中应用

Spring MVC中的适配器模式主要用于执行目标 Controller 中的请求处理方法。

在Spring MVC中,DispatcherServlet 作为用户,HandlerAdapter 作为期望接口,具体的适配器实现类用于对目标类进行适配,Controller 作为需要适配的类。

Spring MVC 中的 Controller 种类众多,不同类型的 Controller 通过不同的方法来对请求进行处理。如果不利用适配器模式的话,DispatcherServlet 直接获取对应类型的 Controller

2.Spring AOP中的适配器模式

在Spring的Aop中,使用的 Advice(通知) 来增强被代理类的功能。

Advice的类型有:MethodBeforeAdvice、AfterReturningAdvice、ThrowsAdvice

在每个类型 Advice 都有对应的拦截器,MethodBeforeAdviceInterceptor、AfterReturningAdviceInterceptor、ThrowsAdviceInterceptor

Spring需要将每个 Advice 都封装成对应的拦截器类型,返回给容器,所以需要使用适配器模式对 Advice 进行转换。

参考博文:适配器模式的应用.

上一篇:android 控件与服务


下一篇:Qt QImag图像保存、格式转换