设计模式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)

相关推荐

  • C++11:std::tuple

    技术C++11:std::tuple C++11:std::tuple翻译来自:https://thispointer.com/c11-stdtuple-tutorial-examples/
    在本文中,

    礼包 2021年11月23日
  • 鲜为人知的读音,\”鲜为人知\”的意思是什么

    技术鲜为人知的读音,\鲜为人知\的意思是什么鲜为人知的意思是很少有人知道。 鲜为人知,读作鲜为人知的读音:xiǎn wéi rén zhī 相关词汇: 1、近义词:无人问津 不为人知 默默无闻 平淡无味
    2、反义词:路

    生活 2021年10月19日
  • 82年巴姓歌手,布仁巴雅尔是歌手还是歌唱家

    技术82年巴姓歌手,布仁巴雅尔是歌手还是歌唱家布仁巴雅尔是歌手82年巴姓歌手。1、布仁巴雅尔(1960年3月6日-2018年9月19日),出生于内蒙古自治区呼伦贝尔市新巴尔虎左旗,中国蒙古族男歌手,毕业于内蒙古艺术学院。

    生活 2021年10月28日
  • 虚拟环境中如何查opencv的版本号(opencv怎么添加依赖项)

    技术如何进行opencv vector 测试这篇文章给大家介绍如何进行opencv vector 测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。#include
    #incl

    攻略 2021年12月15日
  • 书写高质量SQL的30条建议分别是哪些

    技术书写高质量SQL的30条建议分别是哪些书写高质量SQL的30条建议分别是哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言小编将结合实例demo,阐

    攻略 2021年11月30日
  • 在计算机中一个字节是由几位二进制码表示的

    技术在计算机中一个字节是由几位二进制码表示的这篇文章主要介绍“在计算机中一个字节是由几位二进制码表示的”,在日常操作中,相信很多人在在计算机中一个字节是由几位二进制码表示的问题上存在疑惑,小编查阅了各式资料,整理出简单好

    攻略 2021年10月25日