当前位置: 首页 > article >正文

Spring 设计模式之适配器模式

Spring 设计模式之适配器模式

  • 适配器模式
  • 用到的场景
  • java举例

适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类一起工作。
其核心思想是通过一个适配器类将不兼容的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作

两者通过适配器一起工作,强调

1.通过实现目标接口和内部组合
2.实现的目标接口一定是旧对象
3.不是通过继承

用到的场景

1.新的对象,需要旧对象里面的方法
2.A有,B没有,B就通过适配器去获取A里面的元素(方法)

需要存在的核心类:
1.适配器类(实现旧对象)

java举例

// 旧的打印机接口  
public interface OldPrinter {  
    void printOldWay(String content);  
}

// 旧的打印机实现  
public class OldPrinterImpl implements OldPrinter {  
    @Override  
    public void printOldWay(String content) {  
        System.out.println("使用旧的方式打印内容: " + content);  
    }  
}

// 新的打印机接口  
public interface NewPrinter {  
    void printNewWay(String content);  
}

// 适配器类,将旧的打印机适配为新的打印机  
public class PrinterAdapter implements NewPrinter {  
    private OldPrinter oldPrinter;  
  
    public PrinterAdapter(OldPrinter oldPrinter) {  
        this.oldPrinter = oldPrinter;  
    }  
  
    @Override  
    public void printNewWay(String content) {  
        // 适配过程:将新方式的内容适配为旧方式的内容进行打印  
        oldPrinter.printOldWay(content);  
    }  
}

// 新的文档类,它需要一个新打印机来打印  
public class NewDocument {  
    public void print(NewPrinter printer) {  
        printer.printNewWay("这是一个新文档的内容");  
    }  
}

// 调用使用示例
public class AdapterPatternDemo {  
    public static void main(String[] args) {  
        // 创建一个旧的打印机实例  
        OldPrinter oldPrinter = new OldPrinterImpl();  
  
        // 使用适配器将旧的打印机适配为新的打印机  
        NewPrinter newPrinter = new PrinterAdapter(oldPrinter);  
  
        // 创建一个新的文档并打印  
        NewDocument document = new NewDocument();  
        document.print(newPrinter);  
    }  
}

运行结果

使用旧的方式打印内容: 这是一个新文档的内容

http://www.kler.cn/news/368539.html

相关文章:

  • 安全知识见闻-脚本语言对与安全的重要性
  • 【笔记】软件测试09——接口测试
  • gin入门教程(4):路由与处理器
  • Redis_写时复制(cow)
  • socket 封装,wl ipv4 ipv6
  • 西瓜书《机器学习》符号表KaTex表示
  • grafana 8.0 添加钉钉告警
  • Mysql之视图创建
  • 如何从示波器上得到时间常数
  • C#制作学生管理系统
  • 【热门主题】000010 深入 Vue.js 组件开发
  • 关于我的数据库——MySQL——第五篇
  • pandas习题 024:用字典构造 DataFrame
  • k8s的配置和存储(ConfigMap、Secret、Hostpath、EmptyDir以及NFS的服务使用)
  • 一种小型固定翼无人机弹射着陆系统的设计
  • 一步一步从微信小程序获取asp.net Core API的数据
  • 鸿蒙模块化
  • 网页上的视频怎么下载下来?三种方法
  • Python中的文本分析:统计文本文件中每个单词的出现频率
  • Elasticsearch 实战:搜索与分析的利器
  • Vmware虚拟机引起的windowswifi功能消失异常
  • Centos7.9安装MySQL(二进制)
  • 端到端测试?何必Postman,试试Automan
  • netty之ServerBootstrap和Bootstrap
  • 优先算法:双指针、移动零
  • 程序员修仙传