1. 程式人生 > >mybatis-3.4.x 設計模式的使用

mybatis-3.4.x 設計模式的使用

設計模式概覽

行為類

中介者模式
命令模式
備忘錄模式
狀態模式
策略模式
直譯器模式
迭代器模式
觀察者模式
訪問者模式
模板方法模式
責任鏈模式

建立類

單例模式
工廠模式
抽象工廠模式
建造者模式
原型模式

結構類

介面卡模式
橋接模式
組合模式
裝飾模式
門面模式
享元模式
代理模式

mybatis使用到的模式

建造者模式

mybatis中建造者模式用的還是非常之多的

SqlSessionFactoryBuilder 構建 SqlSessionFactory物件
XMLConfigBuilder 構建複雜的Configuration物件
MappedStatement.Builder 構建複雜的MappedStatement物件
。。。

抽象工廠模式

DefaultObjectFactory生產mybatis查詢後的實體物件

裝飾模式

1.mybatis的執行器Executor 使用的就是裝飾模式來增強功能,比如CachingExecutor
2.mubatis的Cache快取實現,也是使用裝飾模式來增強cache的功能,比如BlockingCache,FifoCache,LoggingCache...

代理模式

這個設計模式就用的更加普遍啦

1.mapper介面的使用,用jdk/cglib的動態代理實現
2.懶載入模式使用動態代理,為查詢出來的物件增強功能,攔截普通方法的呼叫,達到懶載入效果
3.plugin的實現

過濾器鏈模式

plugin 的實現也結合了過濾器鏈模式,把客戶端配置的n個plugin鏈式的作用在物件上

模板方法模式

  Executor的實現 使用了模板方法模式

  /**
  * 詳見BaseExecutor.java  下面都是模板方法,具體實現交給具體子類
  */
  protected abstract int doUpdate(MappedStatement ms, Object parameter)
      throws SQLException;

  protected abstract List<BatchResult> doFlushStatements(boolean isRollback)
      throws SQLException;

  protected abstract <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)
      throws SQLException;

  protected abstract <E> Cursor<E> doQueryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds, BoundSql boundSql)
      throws SQLException;

策略模式

按照mapper介面對應的操作型別,利用策略模式,路由到正確的操作邏輯上