天天看點

Mybatis-3.5.6使用的設計模式總結

  1. 建造者設計模式
  2. 工廠模式
  3. 單例模式
  4. 代理模式
  5. 擴充卡模式
  6. 模闆方法模式
  7. 裝飾器模式
  8. 責任鍊模式
  • 建造者設計模式

一個複雜的對象通過一個個簡單的對象建構出來。這種類型的設計模式屬于建立型模式,它提供了一種建立對象的最佳方式。

Mybatis中有SqlSessionFactoryBuilder、SqlSessionFactory、XMLConfigBuilder 就使用了建造者模式。總而言之,建構對象通過不同的手段進行建構出來的都屬于建造者模式,不一定是複雜的對象。

  • 工廠模式

就是專門建立某某對象的工廠,和面向對象程式設計理論差不多無需知道怎麼建構出來(建構的過程)隻需要高訴我你需要什麼樣對象,我即可根據要求進行生産。

生活中案例:外包公司做各種系統,有一家銀行隻要把想要的需求給它,指定傳遞的時間談好價錢,到時候外包公司拼了命的讓老鐵們加班設計,最後趕出來了。外包公司就是工廠,銀行就是用戶端。用戶端不管你是怎麼搞出來的(不關注具體的流程),外包公司也不給銀行說。

mybatis中的:SqlSessionFactory、ObjectFactory、MapperProxyFactory就使用了工廠模式

  • 單例模式(Singleton Pattern)

是 Java 中最簡單的設計模式之一。這種類型的設計模式屬于建立型模式,它提供了一種建立對象的最佳方式。這種模式涉及到一個單一的類,該類負責建立自己的對象,同時確定隻有單個對象被建立。這個類提供了一種通路其唯一的對象的方式,可以直接通路,不需要執行個體化該類的對象。

生活中案例:太陽隻有一個,月亮隻有一個,每個人也是獨一無二的

mybatis中:org.apache.ibatis.logging.LogFactory,日志工廠類。

  • 代理模式(Proxy Pattern)

一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。

生活中的案例:房産中介、婚介所、黃牛黨等都是代理模式。

Mybatis中的MapperProxy、Plugin等使用代理模式。中尤其是動态代理使用的是相當的多,建議先學習代理模式,然後在學習動态代理(JDK和CGlib這兩種),看Mybatis源碼,動态代理是必須掌握的。

  • 擴充卡模式(Adapter Pattern)

是作為兩個不相容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的接口功能。

生活中案例:usb3.0接口适配2.0的儲存接口

Mybatis中:Log,對于Log4j、JDK、longging這些沒有直接是想slf4j接口的日志元件,需要擴充卡。

  • 模闆模式(Template Pattern)

一個抽象類公開定義了執行它的方法的方式/模闆。它的子類可以按需要重寫方法實作,但調用将以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。定義一個操作中的算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

Mybatis中:如父類BaseExecutor,子類SimpleExecutor、BatchExecutor、ReuseExecutor。還有BaseTypeHandler和所有的子類例如IntegerTypeHandler;基本都是在父類裡實作一個通用的方法,然後建立一個抽象方法,這個抽象方法留給子類自己去實作。這個抽象方法也叫鈎子方法。

  • 裝飾器模式(Decorator Pattern)

允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式建立了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

生活中的案例:人靠衣裳馬靠鞍。美容照相機、沒有攝影機,美圖秀秀。此設計模式重點在于對已有的功能進行擴充。

Mybatis中:Cache的實作類LruCache、FifoCache等都是裝飾一個類PerpetualCache。常見代碼格式,就是裝飾類中會有個被裝飾類的屬性,并且這個屬性還是構造方法的參數。

  • 責任鍊模式(Chain of Responsibility Pattern)

為請求建立了一個接收者對象的鍊。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那麼它會把相同的請求傳給下一個接收者,依此類推。

生活中的案例:我們在OA系統發起一個審批,顯示項目經理,再是部門經理,再是HR,再是老闆。面試流程,顯示小組長面試裡,項目經理面試,部門經理面試,HR面試。

Mybatis中,InterceptorChain中有個屬性interceptors,其中就是儲存了所有Mybatis的插件,執行插件的時候就是周遊這個interceptors。

掃碼關注,持續更新内容

Mybatis-3.5.6使用的設計模式總結

繼續閱讀