精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

適配器模式在Mybatis中的妙用

開發 后端
本文介紹了適配器模式在Mybatis中的用法。一起來看看吧。

寫在前面:設計模式源于生活,而又高于生活!

什么是適配器模式

定義:將一個系統的接口轉換成另外一種形式,從而使原來不能直接調用的接口變得可以調用。

適配器模式角色劃分

適配器模式涉及3個角色:

  1.  源(Adaptee):需要被適配的對象或類型,相當于插頭。
  2.  適配器(Adapter):連接目標和源的中間對象,相當于插頭轉換器。
  3.  目標(Target):期待得到的目標,相當于插座。

適配器模式包括3種形式:類適配器模式、對象適配器模式、接口適配器模式(或又稱作缺省適配器模式)。

適配器模式應用場景

  1.  新老版本接口的兼容
  2.  Mybatis多種日志框架的整合

適配器創建的方式

  1.  對象適配器(組合模式)
  2.  類適配器(繼承模式)

適配器快速入門例子

比如早期的時候V1版本訂單接口的入參為Map類型,隨著業務的更新和迭代在V2版本的時候該訂單接口的入參需要支持List的類型?請問不改變的該接口代碼的情況下,如何支持List類型。

1.源(Adaptee):需要被適配的對象或類型,相當于插頭。 

  1. public void froOrderMap(Map map) {  
  2.     for (int i = 0; i < map.size(); i++) {  
  3.         // 使用I作為MapKey獲取數據  
  4.         String value = (String) map.get(i);  
  5.         System.out.println("value:" + value);  
  6.     }  

2.目標(Target):期待得到的目標,相當于插座。 

  1. public interface List<E> extends Collection<E> {  
  2.     ......  
  3.     int size();  
  4.     E get(int index);  
  5.     E set(int index, E element);  

3.適配器(Adapter):連接目標和源的中間對象,相當于插頭轉換器 

  1. public class ListAdapter extends HashMap {  
  2.     private List list;  
  3.     public ListAdapter(List list) {  
  4.         this.list = list;  
  5.     }  
  6.     @Override  
  7.     public int size() {  
  8.         return list.size();  
  9.     }  
  10.     @Override  
  11.     public Object get(Object key) {  
  12.         return list.get(Integer.valueOf(key.toString()).intValue());  
  13.     }  

測試運行效果 

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         // 1.獲取集合類型用戶  
  4.         List member = new MemberService().getMember();  
  5.         //new OrderService().froOrderMap(member);  
  6.         ListAdapter listAdapter = new ListAdapter(member);  
  7.         new OrderService().froOrderMap(listAdapter);  
  8.     }  

使用適配器模式實現日志收集

比如設計一個日志收集系統,可能會考慮文件寫入、也可能考慮寫入MQ、也可能考慮寫入數據庫等。

對象適配器方式實現

定義基本實體類 

  1. @Data  
  2. public class LogBean {  
  3.     /**  
  4.      * 日志ID  
  5.      */  
  6.     private String logId;  
  7.     /**  
  8.      * 日志內容  
  9.      */  
  10.     private String logText;  

1.源目標接口 

  1. public interface LogWriteFileService {  
  2.     /**  
  3.      * 將日志寫入到文件中  
  4.      */  
  5.     void logWriteFile();  
  6.     /**  
  7.      * 從本地文件中讀取日志  
  8.      *  
  9.      * @return  
  10.      */  
  11.     List<LogBean> readLogFile();  

2.源目標接口實現類 

  1. public class LogWriteFileServiceImpl implements LogWriteFileService {  
  2.     @Override  
  3.     public void logWriteFile() {  
  4.         System.out.println(">>>將日志寫入文件中...");  
  5.     }  
  6.   @Override  
  7.     public List<LogBean> readLogFile() {  
  8.         LogBean log1 = new LogBean();  
  9.         log1.setLogId("0001");  
  10.         log1.setLogText("Tomcat啟動成功.."); 
  11.         LogBean log2 = new LogBean();  
  12.         log2.setLogId("0002");  
  13.         log2.setLogText("Jetty啟動成功..");  
  14.         List<LogBean> listArrayList = new ArrayList<LogBean>();  
  15.         listArrayList.add(log1);  
  16.         listArrayList.add(log2);  
  17.         return listArrayList;  
  18.     }  

3.目標接口 

  1. public interface LogWriteDbService {  
  2.     /**  
  3.      * 將日志寫入到數據庫中 
  4.      */  
  5.    public void writeDbFile(LogBean logBean);  

4.適配器 

  1. //LogAdapter :適配器  
  2. //LogWriteDbService:目標  
  3. public class LogAdapter implements LogWriteDbService {  
  4.     //源接口  
  5.     private LogWriteFileService logWriteFileService;  
  6.     public LogAdapter(LogWriteFileService logWriteFileService) {  
  7.         this.logWriteFileService = logWriteFileService;  
  8.     }  
  9.     @Override  
  10.     public void writeDbFile(LogBean logBean) {  
  11.         // 1.從文件中讀取日志文件  
  12.         List<LogBean> logBeans = logWriteFileService.readLogFile();  
  13.         //目標  
  14.         // 2.寫入到數據庫中  
  15.         logBeans.add(logBean);  
  16.         System.out.println(">>>將數據寫入到數據庫中..");  
  17.         // 3.寫入到本地文件中  
  18.         logWriteFileService.logWriteFile();  
  19.     }  

適配器模式優缺點

適配器模式的優點

  •  更好的復用性
  •  系統需要使用現有的類,而此類的接口不符合系統的需要。那么通過適配器模式就可以讓這些功能得到更好的復用。
  •  更好的擴展性
  •  在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。

適配器模式的缺點

  •  過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異于一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構。

Mbatis 日志收集分析

Java開發中經常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定義了一套統一的日志接口供上層使用,并為上述常用的日志框架提供了相應的適配器

在Mybatis的日志模塊中就是使用了適配器模式。Mybatis內部在使用日志模塊時,使用了其內部接口 org.apache.ibatis.logging.Log,但是常用的日志框架的對外接口各不相同,Mybatis為了復用和集成這些第三方日志組件,在其日志模塊中,提供了多種Adapter,將這些第三方日志組件對外接口適配成org.apache.ibatis.logging.Log,這樣Myabtis 就可以通過Log接口調用第三方日志了

源碼分析圖

源碼剖析

Mybatis Log接口:相當于源接口 

  1. package org.apache.ibatis.logging;  
  2. public interface Log {  
  3.   boolean isDebugEnabled();  
  4.   boolean isTraceEnabled();  
  5.   void error(String s, Throwable e);  
  6.   void error(String s);  
  7.   void debug(String s);  
  8.   void trace(String s);  
  9.   void warn(String s);  

Mybatis源接口實現類

適配器第一種 

  1. package org.apache.ibatis.logging.slf4j;  
  2. import org.apache.ibatis.logging.Log;  
  3. import org.slf4j.Logger;  
  4. //Slf4jLoggerImpl :相當于適配器  
  5. //Log :相當于源接口  
  6. class Slf4jLoggerImpl implements Log {  
  7.   //Logger:相當于目標接口  
  8.   private Logger log;  
  9.   public Slf4jLoggerImpl(Logger logger) {  
  10.     //源=目標  
  11.     log = logger 
  12.   } 

適配器第二種 

  1. package org.apache.ibatis.logging.log4j2;  
  2. import org.apache.ibatis.logging.Log;  
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5. import org.apache.logging.log4j.spi.AbstractLogger;  
  6. //Log4j2Impl :相當于適配器  
  7. //Log :相當于源接口  
  8. public class Log4j2Impl implements Log {  
  9.   private Log log;  
  10.   //構造器  
  11.   public Log4j2Impl(String clazz) {  
  12.     //目標接口  
  13.     Logger logger = LogManager.getLogger(clazz);  
  14.     //判斷類型去實現:相當于目標  
  15.     if (logger instanceof AbstractLogger) {  
  16.       log = new Log4j2AbstractLoggerImpl((AbstractLogger) logger);  
  17.     } else {  
  18.       //源=目標  
  19.       log = new Log4j2LoggerImpl(logger);  
  20.     }  
  21.   } 

目標接口:Logger

 

 

責任編輯:龐桂玉 來源: Java知音
相關推薦

2018-10-11 10:38:31

前端JavaScript編程語言

2020-10-25 08:56:21

適配器模式

2022-02-13 23:33:24

設計模式Java

2013-11-26 16:39:21

Android設計模式

2021-02-18 08:39:28

設計模式場景

2012-05-16 17:22:11

Java設計模式

2025-06-05 01:45:00

Spring框架適配器

2022-02-18 17:21:29

適配器模式客戶端

2012-09-19 15:29:26

Worklight適配器

2012-08-02 10:46:34

JavaAdapter模式

2009-11-18 18:08:20

PHP適配器模式

2012-12-10 10:53:04

IBMdW

2024-02-22 12:13:49

適配器模式代碼

2024-07-31 10:41:16

C#設計模式

2024-04-10 12:27:43

Python設計模式開發

2013-02-26 10:55:47

C#適配器設計模式

2012-04-12 09:33:02

JavaScript

2022-05-29 22:55:00

適配器設計模式

2022-12-12 09:20:59

適配器模式接口

2015-08-07 10:05:37

recyclervie超省寫法
點贊
收藏

51CTO技術棧公眾號

国产福利一区视频| 久久av一区二区三区漫画| 2017亚洲天堂| 久久久精品区| 五月婷婷综合激情| 色姑娘综合网| 国产91久久久| 秋霞av亚洲一区二区三| 伦理中文字幕亚洲| 国产av一区二区三区传媒| 午夜影院在线观看国产主播| 中文字幕免费观看一区| 成人免费视频视频在| 中文字幕日韩免费| 欧美va亚洲va日韩∨a综合色| 一区二区三区久久| 精品日本一区二区三区| 国产又黄又爽视频| 国产农村妇女精品一区二区| 亚洲人精选亚洲人成在线| 日本成人在线免费观看| 日韩一区二区三区在线免费观看| 久久久影视传媒| 91久久精品美女| 日韩电影在线观看一区二区| 欧美久久九九| 日韩一级裸体免费视频| 9.1成人看片| 日本精品一区二区三区在线观看视频| 亚洲国产精品t66y| 国产美女在线精品免费观看| 国产一区二区在线播放视频| 乱人伦精品视频在线观看| 欧美成人黑人xx视频免费观看| 日本激情视频在线播放| 国产在线美女| 国产精品国产自产拍高清av王其| 国产在线高清精品| 国产成人无码精品亚洲| 欧美在线播放| 爱福利视频一区| 四虎成人免费影院| 一本久久青青| 亚洲精品有码在线| 青青草视频网站| 爱高潮www亚洲精品| 欧美一区二区在线视频| 亚洲黄色小视频在线观看| 欧美xxx网站| 高跟丝袜欧美一区| 久无码久无码av无码| 在线电影福利片| 最新成人av在线| 在线综合视频网站| 在线播放日本| 国产精品毛片久久久久久| 色视频一区二区三区| 国产中文字幕在线视频| 26uuu精品一区二区| 久久精品人人做人人爽电影| 秋霞欧美在线观看| 99精品国产91久久久久久| 国产在线欧美日韩| 蜜臀av在线观看| 99久久综合色| 久久久久久亚洲精品不卡4k岛国| 91好色先生tv| 国产综合色在线视频区| 国产日韩视频在线观看| 一区二区三区日| 激情综合色播激情啊| 91社区国产高清| 亚洲精品一区二区三区不卡| 成人高清视频在线观看| 久久99欧美| av在线电影免费观看| 一区视频在线播放| av在线免费观看国产| 91九色美女在线视频| 日韩欧美在线免费观看| 在线观看的毛片| 国产精品一区二区精品| 欧美精品一区在线观看| 欧美老熟妇乱大交xxxxx| 成人三级视频| 久久99久久99精品中文字幕 | 99riav视频一区二区| 欧美优质美女网站| 99九九99九九九99九他书对| 中文字幕av一区二区三区四区| 欧美日韩国产一区在线| 精品一区二区成人免费视频| av毛片在线| 狠狠干狠狠久久| www.夜夜爽| 国产一区福利| 中文字幕欧美日韩在线| 久操视频免费在线观看| 久久一日本道色综合久久| 成人精品一区二区三区电影免费| 涩涩视频在线观看| 国产一区二区三区综合| 久久99国产精品| 黄色精品在线观看| 欧美日韩在线免费观看| 亚洲自拍第三页| 婷婷成人影院| 欧美大片va欧美在线播放| 性无码专区无码| 国产精品一二三四| 天堂√在线观看一区二区| wwwww亚洲| 欧美精品乱人伦久久久久久| 人妻丰满熟妇av无码久久洗澡| 日本国产精品| 久久中文精品视频| 国产成人a v| 成人看片黄a免费看在线| 在线视频91| 日韩不卡在线| 日韩精品在线观看网站| 久久精品一级片| 日韩成人精品视频| 精品乱码一区| 日本三级在线观看网站| 欧美在线一区二区三区| av无码一区二区三区| 牛牛国产精品| 成人中文字幕+乱码+中文字幕| 国产精品无码免费播放 | 青青久久av北条麻妃海外网| 亚洲无码精品在线观看| 久久嫩草精品久久久精品一| 日韩激情视频一区二区| www久久久| 色婷婷综合久久久久中文字幕1| 在线免费看av网站| 日韩av不卡在线观看| 欧美高清一区二区| 老司机深夜福利在线观看| 精品国产乱码久久久久久免费| 在线观看国产免费视频| 91tv精品福利国产在线观看| 国产精品视频资源| 成年人在线视频免费观看| 色久综合一二码| 中文字幕一二三四区| 亚洲影院在线| 久久精品国产精品国产精品污| 日本中文字幕在线播放| 欧美系列日韩一区| 亚洲av成人无码久久精品| 可以看av的网站久久看| 久久久久久亚洲精品不卡4k岛国 | 韩国19禁主播vip福利视频| 一级aaaa毛片| 中文字幕亚洲一区二区va在线| 免费网站永久免费观看| 一区二区三区四区高清视频 | 欧美日韩国产系列| 337人体粉嫩噜噜噜| 久久国产视频网| 国产精品波多野结衣| 精品入口麻豆88视频| 欧美人交a欧美精品| 日本黄视频在线观看| 天天免费综合色| 人妻精品久久久久中文字幕| 日韩激情一区二区| 一区二区免费电影| 精品国产亚洲一区二区三区大结局 | 最近2019年手机中文字幕| 久久久久精彩视频| 1区2区3区国产精品| 韩国三级视频在线观看| 国产视频一区三区| 日韩欧美精品在线不卡| 白嫩亚洲一区二区三区| 久久久久久亚洲精品不卡| 日本亚洲欧美| 欧美三级视频在线| 久草视频在线资源站| 97久久精品人人爽人人爽蜜臀| 在线观看成人av| 精品视频成人| 日本不卡免费高清视频| 男人天堂久久久| 亚洲成人精品视频| 欧美a视频在线观看| 中文字幕在线一区二区三区| 无码人妻一区二区三区一| 葵司免费一区二区三区四区五区| 国产私拍一区| 一区二区视频免费完整版观看| 日韩电视剧在线观看免费网站| 欧美在线视频第一页| 99视频一区二区三区| 五月天亚洲视频| 精品69视频一区二区三区Q| 欧美日韩精品免费看| 久久综合偷偷噜噜噜色| 国产成人aa精品一区在线播放| 日本激情一区二区三区| 欧美在线免费视屏| 国产第一页在线播放| 国产精品视频第一区| 国产一级伦理片| 精品亚洲aⅴ乱码一区二区三区| 污视频在线免费观看一区二区三区 | 国产精品九九九九| 欧美日韩国产一区二区三区| 蜜臀av午夜精品久久| 久久午夜色播影院免费高清 | 蜜桃av噜噜一区二区三区小说| 欧美日产一区二区三区在线观看| 三级在线观看视频| 精品国产欧美一区二区五十路 | 久草中文综合在线| 国产主播在线看| 韩国自拍一区| 日韩不卡一二区| 视频精品在线观看| 国产精品综合久久久久久| 羞羞视频在线观看一区二区| 国产97在线观看| 国产极品在线观看| 欧美黑人巨大精品一区二区| 麻豆系列在线观看| 怡红院精品视频| 黄色国产在线| 亚洲欧美中文字幕| 头脑特工队2在线播放| 精品国产乱码久久久久久久久| 日韩精品一区二区在线播放 | 在线免费观看视频| 97久久精品人人爽人人爽蜜臀| 国产极品尤物在线| 国内精品久久久久久久97牛牛| 国产伦精品一区二区三区照片| 嗯~啊~轻一点视频日本在线观看| 精品国产免费视频| 国产乡下妇女三片| 91久久一区二区| 激情视频网站在线观看| 狠狠干狠狠久久| 中文字幕亚洲精品一区| 午夜婷婷国产麻豆精品| 国产污视频在线看| 午夜免费久久看| 日本中文字幕免费观看| 午夜视频在线观看一区二区三区| 女人裸体性做爰全过| 欧美国产日本韩| 亚洲av成人无码久久精品 | 欧美日韩精品是欧美日韩精品| 日韩在线观看视频一区二区| 亚洲欧美一区二区三区孕妇| 午夜激情福利电影| 中文字幕一区免费在线观看| 永久av免费网站| 亚洲精品国产一区二区精华液 | 成人国内精品久久久久一区| 日本成人伦理电影| 国产精品欧美激情| 四虎影视成人精品国库在线观看 | 中文字幕精品网| 97视频在线观看网站| 这里只有精品丝袜| 国产美女av在线| 欧美激情第一页xxx| 精品极品在线| 国产精品狠色婷| 亚洲ww精品| 999在线观看免费大全电视剧| 国产经典一区| 国产精品一区二区三区久久| 国产美女精品视频免费播放软件| 日本免费一区二区三区视频观看| 中文字幕在线观看网站| 97热在线精品视频在线观看| 欧美日本精品在线| 鲁鲁在线中文| 国产精品激情av电影在线观看 | 亚洲一区二区三区毛片| aiss精品大尺度系列| 免费成人深夜夜行视频| 欧美老女人另类| 亚洲成人动漫在线| 99在线观看免费视频精品观看| 国产精品国三级国产av| 99亚洲伊人久久精品影院红桃| 粉嫩av一区二区三区天美传媒| 欧美日韩国产免费观看视频| 制服诱惑一区| 99国内精品| 91国内在线播放| youjizz久久| 99re6热在线精品视频| 亚洲国产日韩a在线播放性色| 免费一级肉体全黄毛片| 91传媒视频在线播放| 国产哺乳奶水91在线播放| 亚洲欧美激情视频| 色www永久免费视频首页在线| 久久综合久久八八| 国产精品xx| 99精品国产高清在线观看| 视频一区中文| 国产极品在线视频| 国产精品99久久久久久宅男| 久久av无码精品人妻系列试探| 久久久久久日产精品| 欧美日韩精品在线观看视频 | 亚洲最大成人在线视频| 亚洲高清在线观看| www视频在线看| 国产精品美乳在线观看| 9999久久久久| 中文字幕一区二区三区有限公司| 中文字幕免费一区二区| 91看片就是不一样| av在线综合网| wwwav国产| 在线不卡免费欧美| 国产理论电影在线观看| 4388成人网| 国产精东传媒成人av电影| 中文字幕在线观看一区二区三区| 欧美午夜a级限制福利片| 天堂av8在线| 国产精品天美传媒沈樵| 无码人妻丰满熟妇奶水区码| 国产午夜精品久久久| aa视频在线观看| 国产日韩亚洲精品| 亚洲性图久久| 国产一精品一aⅴ一免费| 亚洲品质自拍视频网站| 国产一区二区小视频| xxxxx成人.com| 久久精品女人天堂av免费观看 | 亚洲成人77777| 久久久国产91| 97久久中文字幕| 综合久久国产| 国产一区中文字幕| 一区视频免费观看| 日韩精品一区二| 蜜臀av在线播放| 国产精品视频入口| 亚洲精选成人| 日本一区二区三区网站| 亚洲成人免费观看| 日本黄视频在线观看| 欧美性做爰毛片| 国产探花一区在线观看| 天天爽人人爽夜夜爽| 国产精品午夜久久| 国产又大又长又粗| 久久综合亚洲社区| 99久热这里只有精品视频免费观看| 亚洲精品国产精品国自产观看| 欧美日本在线| 中文字幕三级电影| 欧美午夜片欧美片在线观看| 四虎在线视频| 国产精品久久久91| 99久久.com| 国产精品熟妇一区二区三区四区| 欧美激情资源网| 99免费在线视频| 国内精品久久久久久影视8| 欧美男人操女人视频| 毛片一区二区三区四区| 国产精品理伦片| 亚洲精品97久久中文字幕无码| 中文亚洲视频在线| 高清一区二区| 国产成人无码精品久久久性色| 国产一区二区三区黄视频 | 亚洲国产精品91| 影音先锋资源av| 欧美色视频日本版| av每日在线更新| 99porn视频在线| 免费在线一区观看| 久久艹精品视频| 亚洲无av在线中文字幕| 久久三级中文| 国产又大又硬又粗| 亚洲男女一区二区三区| 欧美自拍偷拍第一页| 91精品久久久久久久久久另类 | 视频直播国产精品| www.久久热| 日韩中文字幕二区| 一区二区成人在线视频| 色在线免费视频| 亚洲最大激情中文字幕| 天堂资源在线中文精品|