适配器模式(一种设计模式)

ops/2024/11/29 18:53:09/

适配器模式, 也叫包装器模式. 将⼀个类的接⼝,转换成客⼾期望的另⼀个接⼝, 适配器让原本接⼝不兼容的类可以合作无间。

简单来说就是⽬标类不能直接使⽤, 通过⼀个新类进⾏包装⼀下, 适配调⽤⽅使⽤. 把两个不兼容的接⼝通过⼀定的⽅式使之兼容.

回忆一下slf4j模式

slf4j是一种门面模式也是我们的适配器模式,我们不需要调用底层的方法,直接调用slf4j就可以完成日志的打印

适配器的创建和使用

package com.syx.book.adapter;public interface Slf4jLog {void log(String message);
}

 在这里我们定义了一个log方法用来打印日志,我们希望直接使用这个接口。

package com.syx.book.adapter;public class Log4jPrint {public void log4jPrint(String message){System.out.println("我是Log,打印日志为"+message);}
}

在这里有一个新的Log4jPrint类,这个Log4jPrint和Slf4jLog并不兼容,要把他们两个进行适配,来调用接口中的打印 ,用户使用下面的适配器来进行Log4j和slf4j的适配。

package com.syx.book.adapter;public class Log4jAdapter implements Slf4jLog{private Log4jPrint log4jPrint;public Log4jAdapter(Log4jPrint log4jPrint) {this.log4jPrint = log4jPrint;}@Overridepublic void log(String message) {log4jPrint.log4jPrint("我是适配器打印日志为:"+message);}
}
⼀般来说,适配器模式可以看作⼀种"补偿模式",⽤来补救设计上的缺陷. 应⽤这种模式算是"⽆奈之举", 如果在设计初期,我们就能协调规避接⼝不兼容的问题, 就不需要使⽤适配器模式了。
package com.syx.book.adapter;public class Main {public static void main(String[] args) {Slf4jLog slf4jLog=new Log4jAdapter(new Log4jPrint());slf4jLog.log("我是客户端");}
}

最后调用main方法将将两个类糅合在一起

  


http://www.ppmy.cn/ops/137719.html

相关文章

23种设计模式-生成器(Builder)设计模式

文章目录 一.什么是生成器设计模式?二.生成器模式的特点三.生成器模式的结构四.生成器模式的优缺点五.生成器模式的 C 实现六.生成器模式的 Java 实现七.代码解析八. 总结 类图: 生成器设计模式类图 一.什么是生成器设计模式? 生成器模式&am…

linux(redhat8)如何安装mysql8.0之rpmtar双版本(最新版)(内网)(离线)

一.环境 系统版本:Red Hat 8.5.0-20 Java环境:build 1.8.0_181-b13 MYSQL:8.x版本 二、查看内核版本 #查看内核版本,根据内核版本下载对应的安装包 cat /proc/version 三、安装方式 一、rpm包方式 一、下载安装包 1. 登录网…

Web登录页面设计

记录第一个前端界面,暑假期间写的,用了Lottie动画和canvas标签做动画,登录和注册也连接了数据库。 图片是从网上找的,如有侵权私信我删除,谢谢啦~

线程与进程的个人理解

进程(Process): 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特…

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…

实战OpenCV之人脸识别

基础入门 随着计算机视觉技术和深度学习的发展,人脸识别已经成为一项广泛应用的技术,涵盖了从安全监控、身份验证、智能家居到大型公共安全项目等多个领域。 人脸识别技术通常包括以下几个主要步骤。 图像采集:通过摄像头或其他图像采集设备,捕获包含人脸的图像或视频帧。 …

MAC 怎么终端怎么退出和进入Anaconda环境

mac安装完anaconda 后,命令行窗口默认使用conda的,取消默认,用以下一行代码在命令行运行即可,重启终端: conda config --set auto_activate_base false # 将false改为true设置默认环境为conda进入conda环境&#xff…

CA系统(file.h---申请认证的处理)

#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件&#xff0c;返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…