设计模式——适配器模式

适配器模式(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中的应用,它使得事件处理更加灵活、可定制。

相关推荐
浮游本尊42 分钟前
Java学习第22天 - 云原生与容器化
java
渣哥3 小时前
原来 Java 里线程安全集合有这么多种
java
间彧3 小时前
Spring Boot集成Spring Security完整指南
java
间彧3 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机4 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解4 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机5 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
洛小豆6 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学7 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole7 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端