设计模式之适配器模式

1、什么是适配器模式

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作

有两种适配器: 类的适配器和对象的适配器

2、适配器模式之类适配器模式

**实现方式:**让Adapter继承Adaptee类,然后实现Target接口,来实现适配器功能

  • Adaptee:适配者类,它是需要被访问的、需要被适配的组件.

  • Target:目标接口,当前系统业务所使用的接口,可以是抽象类或接口.

  • Adapter:适配器类,通过继承和实现目标接口,让客户端按照目标接口的方法访问适配者

  • Client:客户端,适配器的使用者

java 复制代码
/**
 * 源角色(Adaptee):现在需要适配的接口
 */
public class ZhiFu {
    public  void zhiFu(){
        System.out.println("跳转第三方平台");
    }
}
java 复制代码
/**
 * 目标角色(Target):这就是所期待得到的接口。
 * 注意:由于这里讨论的是类适配器模式,因此目标不可以是类。
 */
public interface ZhiFuBao {
    void zhiFuBao();
}
java 复制代码
/**
 * 类适配器
 * 适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。
 */
public class ZhiFuBaoAdapter extends ZhiFu implements ZhiFuBao{
    @Override
    public void zhiFuBao() {
        zhiFu();
        System.out.println("正在使用支付宝支付");
    }
}
java 复制代码
//测试类适配器
public class test {
    public static void main(String[] args) {
        ZhiFuBao zhiFuBao = new ZhiFuBaoAdapter();
        zhiFuBao.zhiFuBao();
}

优点:由于Adapter继承了Adaptee类,所以它可以根据需求重写Adaptee类的方法,使得Adapter的灵活性增强了。

缺点:因为java单继承的缘故,Target类==必须是接口==,以便于Adapter去继承Adaptee并实现Target,完成适配的功能,但这样就导致了Adapter里暴露了Adaptee类的方法,使用起来的成本就增加了。

3、适配器模式之对象适配器模式

**实现方式:**让Adapter持有Adaptee类的实例,然后再实现Target接口,以这种持有对象的方式来实现适配器功能。

java 复制代码
/**
 * 对象适配器
 */
public class ZhiFuBaoObjectAdapter implements ZhiFuBao{
    private ZhiFu zhiFu;

    public ZhiFuBaoObjectAdapter(ZhiFu zhiFu) {
        this.zhiFu = zhiFu;
    }

    @Override
    public void zhiFuBao() {
        zhiFu.zhiFu();
        System.out.println("正在使用支付");
    }
}
java 复制代码
//测试对象适配器
public class test {
    public static void main(String[] args) {
        ZhiFuBaoObjectAdapter zhiFuBaoObjectAdapter = new ZhiFuBaoObjectAdapter(new ZhiFu());
        zhiFuBaoObjectAdapter.zhiFuBao();
    }
}

优点:根据合成复用原则,使用组合替代继承, 所以它解决了类适配器必须继承Adaptee的

局限性问题,也不再要求Target必须是接口。使用成本更低,更灵活。

4、在那些地方见到过适配器模式

1、在JavaWeb导入的jsp-api.jar中GenericServlet类实现Servlet接口,GenericServlet就是一个适配器,HttpServlet类继承它 并重写service方法,然后自己定义的servlet继承HttpServlet并重写service方法

2、在 Spring MVC 中,HandlerAdapter 负责将请求分发给相应的处理器(Handler)。不同类型的处理器可能具有不同的接口,而 HandlerAdapter 则负责将不同类型的处理器适配为统一的处理器接口,从而实现请求的统一处理。

3、Spring AOP 框架中,AdvisorAdapter将不同类型的 Advisor 适配成统一的 MethodInterceptor(Advice)的工具。在 Spring AOP 中,Advisor 是将通知应用到切点上的对象,而 MethodInterceptor 是实际执行通知逻辑的对象。Spring AOP 将不同类型的通知(Before、After、Around、Throws 等)转换为相应的 Advisor,并将其适配到切点上。在运行时,每个 Advisor 都被转换为一个 MethodInterceptor,并应用于目标方法的执行。

相关推荐
lijiachang0307184 分钟前
设计模式(一):单例模式
c++·笔记·学习·程序人生·单例模式·设计模式·大学生
抓哇FullStack-Junior1 小时前
设计模式——适配器模式
java·设计模式·适配器模式
silver6872 小时前
桥接模式详解
设计模式
ThetaarSofVenice3 小时前
带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)
java·适配器模式
思忖小下3 小时前
梳理你的思路(从OOP到架构设计)_设计模式Observer模式
观察者模式·设计模式·eit
窗外的寒风3 小时前
java工作流模式、背包模式、适配器工厂模式整合架构,让服务任务编排更便捷
架构·适配器模式
ThetaarSofVenice5 小时前
能省一点是一点 - 享元模式(Flyweight Pattern)
java·设计模式·享元模式
记得多喝水o5 小时前
图解设计模式
设计模式
InSighT__5 小时前
设计模式与游戏完美开发(2)
java·游戏·设计模式
思忖小下6 小时前
梳理你的思路(从OOP到架构设计)_设计模式Android + Composite模式
设计模式·composite模式