设计模式——适配器模式

适配器模式(Adapter Pattern)是一种结构设计模式。

目的:这种模式通常用于使已经存在的类在不修改其源代码的情况下与其他类进行协作。

实现方法:在不修改原有类的基础上,创建一个新类,继承原有类,重写原有接口或者新增方法接口。

原有类是被适配者,适配器是继承原有类的类。

在原有类上新增方法的示例

cpp 复制代码
// 目标接口
interface Target {
    void request();
}

// 被适配者
class Adaptee {
    void specificRequest() {
        System.out.println("Adaptee's specific request");
    }
}

// 适配器
class Adapter extends Adaptee implements Target {
    @Override
    public void request() {
        specificRequest();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

修改原有类的方法的示例

在Netty中,适配器模式通常用于处理事件驱动的编程模型。Netty中使用了一种基于事件的设计,其中适配器模式可以很好地体现在处理不同类型的事件上。一个常见的例子是ChannelHandler适配器。

Netty的ChannelHandler是用于处理事件的接口,而ChannelHandlerAdapter是一个抽象类,实现了ChannelHandler接口的所有方法。开发者可以选择性地继承ChannelHandlerAdapter并重写感兴趣的方法,而不是实现ChannelHandler中的所有方法。

cpp 复制代码
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

// 自定义适配器
public class CustomHandlerAdapter extends ChannelInboundHandlerAdapter {

    // 重写需要处理的事件方法
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        // 处理读事件
        System.out.println("Received message: " + msg);
        // 其他业务逻辑...
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        // 处理异常事件
        cause.printStackTrace();
        ctx.close();
    }
}

这个例子展示了适配器模式在Netty中的一种常见使用场景。在Netty的事件驱动模型中,ChannelHandler和ChannelHandlerAdapter之间的关系就体现了适配器模式。

适配器模式的主要使用场景

  • 不变动原有类的基础上,给原有类添加方法接口

  • 不变动原有类的基础上,修改原有类的方法的实现

在Netty中,ChannelHandler接口定义了一系列的事件处理方法,而ChannelHandlerAdapter提供了这些方法的默认实现。这样,开发者只需要关注自己感兴趣的事件,选择性地覆盖相应的方法,从而实现自定义的业务逻辑,而无需关心其他方法。这就是适配器模式在Netty中的应用,它使得事件处理更加灵活、可定制。

相关推荐
rannn_11121 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_124987075324 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
短剑重铸之日31 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼19191 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
努力学编程呀(๑•ี_เ•ี๑)1 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
feasibility.1 小时前
AI 编程助手进阶指南:从 Claude Code 到 OpenCode 的工程化经验总结
人工智能·经验分享·设计模式·自动化·agi·skills·opencode
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮1 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu1 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud