精品欧美一区二区三区在线观看 _久久久久国色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资源网站| 国产91色在线|| 欧美三级日本三级| 亚洲日本三级| 欧美一区二区三区喷汁尤物| 熟女少妇在线视频播放| 在线视频自拍| 99久久99久久精品免费观看| 国产免费一区视频观看免费 | 久久免费精品视频| 国产精品美女高潮无套| 一区二区三区国产好| 欧美中文字幕一区二区三区亚洲| 精品一区二区三区无码视频| yjizz视频网站在线播放| 成人午夜碰碰视频| 国产在线观看91精品一区| 免费观看一区二区三区毛片| 99国产**精品****| 国产一区二区日韩精品欧美精品| 久久久久久久久久影视| 久久国内精品| 91黄色小视频| 国产成人在线免费看| 青春草免费在线视频| 中文字幕欧美激情一区| 久久精品国产精品青草色艺| 亚洲AV无码乱码国产精品牛牛 | 久久精品无码一区二区三区毛片| 亚洲www啪成人一区二区| 亚洲成人一区在线| 色婷婷777777仙踪林| 91在线直播| 国产情人综合久久777777| 精品一区二区日本| 秋霞av鲁丝片一区二区| 国产成人av电影在线观看| 国产一区红桃视频| 最近日韩免费视频| 视频一区欧美日韩| 国模吧一区二区三区| 久久久久久欧美精品se一二三四| 亚洲女同一区| 欧美成人精品激情在线观看| 91香蕉视频在线播放| 水蜜桃精品av一区二区| 色吧影院999| 美女三级黄色片| 国产精品99视频| 蜜月aⅴ免费一区二区三区 | 成人国产在线视频| ,一级淫片a看免费| 久久精品99国产精品| 国产精品美女av| 在线观看国产成人| 九色综合狠狠综合久久| 成人在线中文字幕| 国产免费av电影| 国产九色精品成人porny| 亚洲一区二区中文| 好吊色在线观看| 波多野结衣精品在线| 久久www免费人成精品| 男人天堂网在线观看| 国产婷婷色一区二区三区在线| 日本不卡在线观看| 91ph在线| 亚洲影院理伦片| 久久综合九色综合88i| 看黄在线观看| 欧美网站一区二区| 熟妇无码乱子成人精品| 国语一区二区三区| 国产视频精品久久久| 日韩免费成人av| 亚洲精品国产首次亮相| 91国产视频在线| 波多野结衣家庭主妇| 国模少妇一区二区三区| 国产精品.com| 精品三级久久久久久久电影聊斋| 国产精品看片你懂得| 国产1区2区3区中文字幕| 亚洲性色av| 欧美高清视频一二三区| 性活交片大全免费看| 国产精品免费大片| 欧美精品日韩www.p站| 四虎成人永久免费视频| 紧缚奴在线一区二区三区| 97人人做人人人难人人做| 天天射天天操天天干| 国产精品不卡一区| 国产91在线免费| 国产电影一区| 精品在线小视频| 国产高清在线免费观看| 日韩精品亚洲专区| 成人在线观看av| 日本欧美在线视频免费观看| 亚洲成人www| 亚洲综合婷婷久久| 欧美日韩看看2015永久免费| 久久精品久久久久| 国产又黄又粗又爽| 美女尤物国产一区| 开心色怡人综合网站| 国产原创精品视频| 欧洲色大大久久| 88av在线播放| 中文无码久久精品| 国产精品久久久精品| 殴美一级特黄aaaaaa| 椎名由奈av一区二区三区| 欧美牲交a欧美牲交aⅴ免费下载| 日本一区二区三区视频在线看| 国产亚洲激情视频在线| 国产精品成人免费一区二区视频| 久久99精品久久久久婷婷| 欧美伦理一区二区| zzzwww在线看片免费| 日韩视频123| 五月天av网站| 蜜臀av亚洲一区中文字幕| 久久久久综合一区二区三区| 国产经典三级在线| 日韩一二在线观看| 亚洲精品久久久久久国| 另类的小说在线视频另类成人小视频在线| 久久大片网站| 九色porny自拍视频在线播放| 欧美一区二区国产| 91久久国产综合| 久久国产精品99久久久久久老狼| 欧洲在线视频一区| 电影网一区二区| 日韩电影网在线| xxxxxx国产| 成人爽a毛片一区二区免费| 喜爱夜蒲2在线| 欧美1区2区3| 欧美大片在线看免费观看| 国产精品久久久久久久久久久久久久久久久久 | 99视频在线免费观看| 成人影欧美片| 日韩一区二区三| 国产suv一区二区三区| 国产乱淫av一区二区三区| 手机看片日韩国产| 美女久久精品| 欧美激情综合色| 日韩一级免费视频| 欧美日韩国产精品专区| 亚洲乱码国产乱码精品精大量| 最新亚洲一区| 欧美大陆一区二区| 日韩av中字| 最近免费中文字幕视频2019 | 精品国产免费久久| 日本熟妇一区二区| www欧美成人18+| www.超碰com| 国产精品x453.com| www.av一区视频| 日本不卡免费高清视频在线| 亚洲免费视频观看| 亚洲综合免费视频| 一区二区在线观看不卡| 国产熟女高潮一区二区三区| 日韩高清在线观看| 黄频视频在线观看| 高清欧美性猛交xxxx黑人猛| 欧美孕妇与黑人孕交| av黄色在线观看| 日韩一区二区三区在线视频| 日本天堂在线视频| 国产欧美一区二区在线| 一级做a爱视频| 国产精品久久777777毛茸茸| 亚洲精蜜桃久在线| 2023国产精华国产精品| 欧美最猛性xxxxx(亚洲精品)| 91露出在线| 欧美精品一区二区三区一线天视频| 波多野结衣av无码| 一区二区久久久久| 538精品视频| 国产69精品久久99不卡| 青青草av网站| 牛牛国产精品| 日韩经典在线视频| 亚洲一区二区三区日本久久九| 日本亚洲精品在线观看| www视频在线免费观看| 亚洲天堂开心观看| 亚洲av无码片一区二区三区| 欧美在线观看视频一区二区三区| 欧美三级在线免费观看| 欧美韩国日本一区| 人妻av一区二区| 精品在线观看免费| 久久综合久久色| 亚洲美女少妇无套啪啪呻吟| 中文精品一区二区三区| 亚洲动漫精品| 国产91一区二区三区| 欧美91在线|欧美| 热久久免费视频精品| 久久av色综合| 久久精品最新地址| 国产高清视频在线播放| 亚洲国产欧美一区二区三区同亚洲| 一级黄色免费看| 91久久精品一区二区二区| 日韩网红少妇无码视频香港| 亚洲精品乱码久久久久| 国产一二三四视频| 国产农村妇女精品| 国产黄色网址在线观看| av网站一区二区三区| 中文字幕99页| 国产精品538一区二区在线| 视频在线观看免费高清| 久久亚洲综合| 国产一区亚洲二区三区| 中文欧美日韩| 黄色一级视频在线播放| 欧美jizzhd精品欧美巨大免费| 亚洲在线色站| 区一区二视频| 亚洲欧洲三级| 日韩电影免费网址| 亚洲精美视频| 手机亚洲手机国产手机日韩| 亚洲欧洲一区二区福利| 青青草成人影院| 日韩精品欧美专区| av永久不卡| 日韩欧美一区二区三区四区 | 日本不卡一区二区三区四区| 日韩av在线中文字幕| 亚洲欧洲三级| 91精品久久久久久久蜜月| 国产又黄又爽免费视频| 91av精品| 国产精品一色哟哟| 91久久久久| 日韩在线综合网| 亚洲在线一区| 韩国一区二区av| 日本不卡一区二区三区| 中文字幕亚洲乱码| 精品一区二区影视| 色哟哟网站在线观看| 成人免费电影视频| 精品人妻一区二区三区视频| 久久日一线二线三线suv| 国产又粗又猛又爽又黄av | 亚洲高清在线观看一区| 久久国产亚洲| 高清无码视频直接看| 99精品视频免费| 国产一级不卡毛片| 激情五月激情综合网| 苍井空张开腿实干12次| 91看片淫黄大片一级在线观看| 国产av自拍一区| 自拍偷自拍亚洲精品播放| 久久一二三四区| 精品毛片网大全| 最近中文字幕在线观看视频| 欧美精品乱码久久久久久按摩 | 老司机午夜网站| 亚洲三级影院| 少妇高潮喷水久久久久久久久久| 麻豆成人在线观看| 国产精品99久久久精品无码| 久久久精品日韩欧美| 潘金莲一级黄色片| 无码av免费一区二区三区试看| 波多野结衣视频观看| 日韩午夜激情av| 国产中文字幕在线视频| 欧美大片免费观看在线观看网站推荐| 免费成人在线电影| 91久久久久久久久久久| 日本天堂一区| 精品91一区二区三区| 国产一级一区二区| 亚洲天堂一区二区在线观看| 久久色视频免费观看| 九九在线观看视频| 欧美少妇一区二区| 手机看片一区二区| 久久精品国产亚洲精品| 涩涩视频在线| 97超碰资源| 日韩精品久久| 日韩精品一区二区三区色欲av| 国产精品资源在线| 一道本在线观看| 亚洲va欧美va天堂v国产综合| 亚洲天堂手机在线| 亚洲另类欧美自拍| 日韩伦理av| 国产综合视频在线观看| 一本久久青青| 国产美女在线一区| 国产精品伊人色| 国产一区二区三区四区在线| 天天影视色香欲综合网老头| 91国内精品视频| 亚洲亚裔videos黑人hd| 美女扒开腿让男人桶爽久久软| 亚洲永久在线观看| 91精品精品| 一级黄色片国产| 欧美激情在线观看视频免费| 国产尤物在线视频| 精品成a人在线观看| 性国产高清在线观看| 成人黄色激情网| 欧美激情理论| 国产日韩欧美久久| 中文字幕一区二区三区在线播放| 中日韩在线观看视频| 亚洲天天在线日亚洲洲精| 中文在线а√天堂| 欧美成人免费在线| 噜噜噜躁狠狠躁狠狠精品视频| 国产中文字幕一区二区| 亚欧色一区w666天堂| 人妻精品无码一区二区| 欧美国产乱视频| 澳门精品久久国产| 无码人妻少妇伦在线电影| 国产91丝袜在线播放0| 久久综合综合久久| 欧美精品一区二区在线观看| av日韩国产| 久久久影院一区二区三区| 99xxxx成人网| 黄色aaa视频| 欧美三级电影精品| 黄色在线观看网站| 91黄在线观看| 亚洲午夜视频| 黄色录像a级片| 色噜噜狠狠色综合中国| av在线资源站| 91色琪琪电影亚洲精品久久| 一区二区电影| 丰满人妻一区二区三区免费视频棣| 亚洲成人你懂的| 青青青免费视频在线2| 国产精品久久久久久久午夜| 99热在线成人| 人妻av一区二区三区| 偷拍亚洲欧洲综合| 国产在线高清| 91精品久久久久久久久中文字幕| 亚洲欧美综合国产精品一区| 中国特级黄色大片| 色香色香欲天天天影视综合网 | 久久久久一本一区二区青青蜜月| 一区三区自拍| 99免费视频观看| 亚洲三级久久久| 欧美一区二区三区成人片在线| 欧美中文在线视频| 亚洲成av人电影| 亚洲国产精品无码久久久久高潮| 欧美色图片你懂的| 91小视频xxxx网站在线| 久久久久久久久一区| 久久福利资源站| 国产精品第72页| 最好看的2019年中文视频| 亚洲免费一区三区| 国内外免费激情视频| 亚洲六月丁香色婷婷综合久久 | 一区二区三区黄色片| 午夜精品一区二区三区av| av亚洲在线观看| youjizz.com日本| 欧美亚州韩日在线看免费版国语版| 黄色大片在线播放| 玛丽玛丽电影原版免费观看1977 | 一本高清dvd不卡在线观看| 免费在线午夜视频| 久久天堂国产精品| 国产在线精品视频| 中文字幕在线欧美| 色综合久久天天综线观看|