设计模式06-适配器模式,Adapter)

技术设计模式06-适配器模式,Adapter) 设计模式06-适配器模式(Adapter)对适配器模式的功能很好理解,就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起

设计模式06-适配器模式。

适配器模式的功能很好理解,就是把一个类的接口转换成客户端可以接受的另一个接口,这样两个因为两个接口不匹配而无法协同工作的类就可以协同工作。

适配器的重点是将一个接口的功能转换成另一个接口的功能。

设计模式06-适配器模式(Adapter)

概述

适配器模式的功能很好理解,就是把一个类的接口转换成客户端可以接受的另一个接口,这样两个因为两个接口不匹配而无法协同工作的类就可以协同工作。

适配器的重点是将一个接口的功能转换成另一个接口的功能。

优点

更好的可重用性。

系统需要使用现有的类,但是这类类的接口并不能满足系统的需求。那么通过适配器模式可以更好地重用这些功能。

更好的可扩展性。

实现适配器功能时,可以调用自己开发的函数,这样自然扩展了系统的功能。

缺点

过度使用适配器会使系统非常混乱,整体难以把握。比如接口A被调用是显而易见的,但实际上是内部适配接口b的实现,如果这种情况在一个系统中发生太多,那就是灾难。因此,如果没有必要,可以不使用适配器直接重构系统。

简单实现

JDK实现

1.现有的Source接口及其实现类SourceImpl。

公共接口来源{

void execute();

}

公共类SourceImpl实现了Source {

@覆盖

public void execute(){ 0

}

}

2.现在调用使用目标接口的源接口方法,而不修改与源相关的类。

公共接口目标{

void execute target();

}

3.在目标接口的实现类中调用源实现类的函数有两种适配方式。

第一种方法是通过持有Source实现类对象来调用Source方法。与下面的继承方法相比,建议通过汇编完成对Source接口的适配。

公共类HoldObjectAdapter实现了目标{ 0

私人最终来源来源;

HoldObjectAdapter(来源来源){ 0

super();

this.source=source

}

@覆盖

public void execute target(){ 0

source . execute();

}

}

第二种是通过继承Source实现类来调用Source方法。

公共类ExtendClassAdapter扩展了实现Target的SourceImpl

@覆盖

public void execute target(){ 0

execute();

}

}

源码解析

JDK

java.io.InputStreamReader

公共类InputStreamReader扩展了Reader {

私有最终流解码器SD;

public InputStreamReader(InputStream in){ 0

//.

}

}

InputStreamReader通过保持父类InputStream类型的不同接口或实现,使InputStream适应Reader。

Mybatis Log

org.apache.ibatis.logging.Log

公共接口日志{

//.

}

为了适应各种日志实现类,Mybatis使用适配器模式,将各种日志实现适配到同一个接口日志。

org . Apache . ibatis . logging . log4j 2 . log4j 2 logger impl

//.

import org . Apache . logging . log4j . logger;

公共类Log4j2LoggerImpl实现了日志{

私有静态最终标记=MarkerManager . GetMarker(LogFactory。MARKER);

//这里改编了apache的log4j2日志实现类。

私有最终记录器日志;

公共log4j 2 Logger impl(Logger Logger){ 0

log=logger

}

}

org . Apache . ibatis . logging . slf4j . slf4jloggerimpl

类Slf4jLoggerImpl实现日志{

私有最终记录器日志;

//这里改编了slf4j的日志实现类。

公共Slf4jLoggerImpl(日志记录器){ 0

log=logger

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53727.html

(0)

相关推荐

  • 将全站进行HTTPS化优势是什么

    技术将全站进行HTTPS化优势是什么本篇文章为大家展示了将全站进行HTTPS化优势是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在HTTPS项目的开展过程中明显感觉到目前国

    攻略 2021年11月12日
  • Kafka Producer重试参数retries设置取舍的示例分析

    技术Kafka Producer重试参数retries设置取舍的示例分析Kafka Producer重试参数retries设置取舍的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有

    攻略 2021年11月17日
  • mysql-connector-java如何连接驱动

    技术mysql-connector-java如何连接驱动这篇文章主要介绍mysql-connector-java如何连接驱动,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql-connect

    攻略 2021年11月24日
  • Adaptive Cursor Sharing分析

    技术Adaptive Cursor Sharing分析这篇文章主要讲解了“Adaptive Cursor Sharing分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年11月15日
  • Vue 登录Id的传值+ 购物车的结算

    技术Vue 登录Id的传值+ 购物车的结算 Vue 登录Id的传值+ 购物车的结算一、登录Id的传值1、传值if (res.data.code !="") {this.$message({message

    礼包 2021年10月28日
  • 第一次国内革命战争时期,第一次革命和第二次革命时间

    技术第一次国内革命战争时期,第一次革命和第二次革命时间第一次工业革命的时间:18世纪60年代~19世纪40年代第一次国内革命战争时期。第二次工业革命的时间:19世纪60年代后期。
    第一次工业革命极大地提高了生产力,巩固了

    生活 2021年10月25日