适配器模式

作者: Ludwig_van | 来源:发表于2020-03-14 15:44 被阅读0次

    适配器模式:
    作为不兼容接口之间调用的桥梁;
    将一个类的接口转换成客户希望的另外一个接口;
    使用场景:
    当调用双方都不太容易修改的时候,为了复用现有组件可以使用适配器模式;在系统中接入第三方组
    件的时候经常被使用到;

    适配器模式经典案例:

    1. 一个客户(系统)的支付接口需要调用第三方支付功能;
      第三方支付有支付宝,微信,银联等。不同的支付有不同的接口;
      这时需要一个适配器做接口转换;如图(图1)
      (每种第三方服务对应一个适配器,而不是用一个大的适配器,因为后续可能会增加第三方服务,为了遵循开闭原则,所以每增加一个第三方服务都对应增加一个适配器。)

      适配器模式图.png
    2. MyBatis 日志级别的转换;
      mybatis 中日志级别有四个: trace , debug ,info ,warn , error;
      系统本身接入的第三方日志系统,比如说sfl4J,Log4J2,Log4J,JdkLog
      这些第三方的日志级别都不一样,系统希望能将这些第三方的服务日志级别都转换成统一的四个级别。

    适配器实现的要素:

    适配器需要实现和目标角色的接口;
    适配器要依赖适配者角色的接口;
    (一定要面向接口依赖)。
    Target:目标角色,期待得到的接口. (系统定义的日志接口)
    Adaptee:适配者角色,被适配的接口. (第三方日志接口)
    Adapter:适配器角色,将源接口转换成目标接口。

    适配器实现图.png

    日志适配器具体代码:

    import java.util.logging.Level;
    //jdk日志的适配器 实现mybatis自己的日志接口-Log
    public class Jdk14LoggingImpl implement Log{
        //依赖真正提供日志能力的jdk日志类,此处面向接口依赖
        private final Logger log;
        
        //提供构造器注入方式
        public Jdk14LoggingImpl(String clazz){
            log = Logger.getLogger();
        }
        
        //如果系统调用本身的error级别,则这里会转换成调用jdk的SERVER级别
        @Override
        public void error(String s){
            log.log(Level.SERVER,s)
        }
    }
    
    

    相关文章

      网友评论

        本文标题:适配器模式

        本文链接:https://www.haomeiwen.com/subject/jfmvshtx.html