设计模式-Adapter适配器模式和Decorator装饰者模式

简介: 设计模式-Adapter适配器模式和Decorator装饰者模式

1.适配器模式


1.1 适配器的作用


适配器模式的作用是把两个不兼容的对象通过适配器能够连接起来工作。


image.png



1.2 具体案例分析



以MyBatis中的日志模块为例来介绍。常见的日志框架有log4j,log4j2,slf4j,logbak等,但是每种日志框架中的日志级别都有差异。


log4j2的接口:

image.png

slf4j的接口

image.png



也就是可以看到不同的日志框架里面所定义的日志级别和对应的方法都有区别,那么我们的框架怎么来统一使用这些日志框架呢?在MyBatis中通过定义了一个日志接口,定义了日志具有的级别和方法。


image.png



那这时候我们就发现具体的日志框架和这个接口其实是没有办法直接来使用的。


image.png



这时我们就需要通过对应的适配器来处理这种情况,以Slf4J为例。


image.png



2.装饰者模式的理解


2.1 装饰者模式的作用


装饰者模式又称为包装模式(Wrapper),作用是用来动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术, 无须通过继承增加子类就能扩展对象的新功能 。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。


image.png




2.2 装饰者模式的应用



装饰者模式的应用场景还是非常多的,比如


  • IO流中的FileInputStream,FileOutputStream等
  • Spring中的各种Wrapper
  • MyBatis中的缓存设计



我们以MyBatis中的缓存实例为例来看看其具体的实现。


首先是Cache接口

image.png



然后是PerpetualCache实现:仅仅实现了数据基于内存的读写操作。功能单一。


image.png

装饰类:然后在MyBatis中给我们提供了很多的装饰类。

image.png

每个装饰类都有自己的作用


  • BlockingCache:阻塞的


  • LruCache:根据Lru规则来淘汰缓存数据


  • FifoCache:根据FIFO规则来淘汰缓存数据


  • ....

源码中的装饰:


image.png

image.png

比较 说明
优点 1. 扩展对象功能,比继承灵活,不会导致类个数急剧增加2. 可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象<br />3. 具体构建类和具体装饰类可以独立变化,<br />用户可以根据需要自己增加新的具体构件子类和具体装饰子类。
缺点 1. 产生很多小对象。大量小对象占据内存,一定程度上影响性能。2. 装饰模式易于出错,调试排查比较麻烦。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4天前
|
设计模式 Java API
重构旧代码的秘诀:用设计模式 - 适配器模式(Adapter)给Java项目带来新生
【4月更文挑战第7天】适配器模式是解决接口不兼容问题的结构型设计模式,通过引入适配器类实现目标接口并持有不兼容类引用,实现旧代码与新接口的协作。适用于处理兼容性问题、整合遗留代码和集成第三方库。应用时,识别不兼容接口,创建适配器类转换方法调用,然后替换原有引用。注意保持适配器简单、使用组合和考虑扩展性。过度使用可能导致系统复杂和维护成本增加,应谨慎使用。
|
4天前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
40 4
|
4天前
|
设计模式 Java Go
【设计模式】适配器模式怎么理解?
【设计模式】适配器模式怎么理解?
8 1
|
4天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
|
4天前
|
设计模式 Go
[设计模式 Go实现] 结构型~适配器模式
[设计模式 Go实现] 结构型~适配器模式
|
4天前
|
设计模式 Java
【设计模式系列笔记】装饰者模式
装饰者模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装类中来为原始对象添加新的行为。这种模式可以动态地将责任附加到对象上,而不影响其它对象。
40 11
|
4天前
|
设计模式 Java
【设计模式系列笔记】适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一种接口。它允许原本由于接口不匹配而无法一起工作的类能够协同工作。适配器模式通常涉及一个称为适配器的类,它充当两个不兼容接口之间的桥梁。
40 6
|
4天前
|
设计模式 Java 数据库
小谈设计模式(18)—适配器模式
小谈设计模式(18)—适配器模式
|
4天前
|
设计模式 算法 API
适配器模式:C++设计模式中的瑞士军刀
适配器模式:C++设计模式中的瑞士军刀
51 0
|
4天前
|
设计模式
设计模式之适配器模式
设计模式之适配器模式