• Java设计模式之适配器模式


    适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的类能够一起工作,通过适配器将一个类的接口转换成另一个类的接口。

    适配器模式通常在以下情况下使用:

    1. 当需要使用一个已经存在的类,但其接口与所需接口不匹配时。
    2. 当需要创建一个可复用的类,该类与其他不相关的类或不可预见的类(即第三方库或框架中的类)进行协作。

    适配器模式涉及三个主要角色:

    1. 目标接口(Target Interface):客户端期望的接口,适配器将目标接口转换为适配者接口。
    2. 适配者类(Adaptee Class):需要被适配的类或接口。
    3. 适配器类(Adapter Class):实现目标接口,并将适配者接口转换为目标接口。

    下面是一个简单的Java示例,展示了适配器模式的用法。假设我们有一个已存在的LegacyRectangle类,它有一个calculateArea()方法来计算矩形的面积。但是,我们希望使用一个新的Rectangle接口,该接口有一个getArea()方法来计算矩形的面积。我们可以使用适配器模式来实现这个转换:

    // 目标接口
    interface Rectangle {
        double getArea();
    }
    
    // 适配者类
    class LegacyRectangle {
        double calculateArea() {
            // 计算矩形的面积
            return 10.0;
        }
    }
    
    // 适配器类
    class RectangleAdapter implements Rectangle {
        private LegacyRectangle legacyRectangle;
    
        public RectangleAdapter(LegacyRectangle legacyRectangle) {
            this.legacyRectangle = legacyRectangle;
        }
    
        @Override
        public double getArea() {
            // 调用适配者类的方法,并进行适配转换
            return legacyRectangle.calculateArea();
        }
    }
    
    // 客户端代码
    public class Main {
        public static void main(String[] args) {
            LegacyRectangle legacyRectangle = new LegacyRectangle();
            Rectangle rectangle = new RectangleAdapter(legacyRectangle);
    
            double area = rectangle.getArea();
            System.out.println("Area: " + area);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在上面的示例中,LegacyRectangle是适配者类,它有一个calculateArea()方法来计算矩形的面积。Rectangle是目标接口,它定义了一个getArea()方法。RectangleAdapter是适配器类,它实现了Rectangle接口,并在内部使用适配者类的方法来实现getArea()方法。

    通过适配器模式,我们可以在不修改现有代码的情况下,将LegacyRectangle类的功能适配到新的Rectangle接口中,使得客户端可以通过Rectangle接口调用适配者类的功能。这样,我们就实现了接口之间的适配和兼容。

  • 相关阅读:
    PLC面向对象编程系列之如何设计分解状态机(FSM)的状态
    算法学习 | day48/60 两个字符串的删除操作/编辑距离
    构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)
    Android 深入理解View.post()获取宽高、Window加载View原理
    【C ++基础】迭代器(iterator)在string里面的简单使用
    蓝天转债,双良转债上市价格预测
    C++ 函数
    java Spring Boot 将日志写入文件中记录
    springboot员工工作量管理系统java
    Centos8安装CDH解决不兼容问题
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133900010