日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Mybatis之设计模式之装饰者模式

發(fā)布時間:2023/12/6 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis之设计模式之装饰者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

了解,什么是裝飾者模式?

1.定義

裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。

2.特點

1 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。2 裝飾對象包含一個真實對象的引用(reference)3 裝飾對象接受所有來自客戶端的請求。它把這些請求轉發(fā)給真實的對象。4 裝飾對象可以在轉發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現(xiàn)對給定類的功能擴展。

3.適用性

1. 需要擴展一個類的功能,或給一個類添加附加職責。2. 需要動態(tài)的給一個對象添加功能,這些功能可以再動態(tài)的撤銷。3. 需要增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能,從而使繼承關系變的不現(xiàn)實。4. 當不能采用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用于生成子類。

4.優(yōu)點

1. Decorator模式與繼承關系的目的都是要擴展對象的功能,但是Decorator可以提供比繼承更多的靈活性。2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可以創(chuàng)造出很多不同行為的組合。

5.缺點

1. 這種比繼承更加靈活機動的特性,也同時意味著更加多的復雜性。2. 裝飾模式會導致設計中出現(xiàn)許多小類,如果過度使用,會使程序變得很復雜。3. 裝飾模式是針對抽象組件(Component)類型編程。但是,如果你要針對具體組件編程時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變Component接口,增加新的公開的行為,實現(xiàn)“半透明”的裝飾者模式。在實際項目中要做出最佳選擇。

6.模式簡化

1. 如果只有一個Concrete Component類而沒有抽象的Component接口時,可以讓Decorator繼承Concrete Component。2. 如果只有一個Concrete Decorator類時,可以將Decorator和Concrete Decorator合 并。

Mybatis 源碼分析

如圖:

在圖中,cachey這個接口類,被所有類實現(xiàn)了 這里有一個比較特別的類----PerpetualCache.class

目錄結構:

類結構

由于類太多,這里只曬三個類結構圖



這樣,大概大家都對這幾個類和裝飾器了解了吧。

講解

在mybatis中緩存的功能由接口Cache類定義,使用了裝飾器設計模式,存儲和緩存的功能由 PerpetualCache類實現(xiàn),然后通過其他的裝飾器來對PerpetualCache類進行緩存策略控制。如上圖,可以這樣理解,PerpetualCache是基類,其它實現(xiàn)的Cache的類都是對基類的擴 展,也就是裝飾來包裹真實的對象。擴展了類的功能,也可以說是附加了一些方法。使得具有很好的靈活性。

說明

用于裝飾PerpetualCache的標準裝飾器共有8個(全部在 org.apache.ibatis.cache.decorators包中):

1. FifoCache:先進先出算法,緩存回收策略2. LoggingCache:輸出緩存命中的日志信息3. LruCache:最近最少使用算法,緩存回收策略4. ScheduledCache:調度緩存,負責定時清空緩存5. SerializedCache:緩存序列化和反序列化存儲6. SoftCache:基于軟引用實現(xiàn)的緩存管理策略7. SynchronizedCache:同步的緩存裝飾器,用于防止多線程并發(fā)訪問8. WeakCache:基于弱引用實現(xiàn)的緩存管理策略

附加:

一個特殊的裝飾器TransactionalCache:事務性的緩存

mybatis緩存同樣分為一級緩存和二級緩存:
  • 一級緩存,又叫本地緩存,是PerpetualCache類型的永久緩存,保存在執(zhí)行器中
    (BaseExecutor),而執(zhí)行器又在SqlSession(DefaultSqlSession)中,所以
    一級緩存的生命周期與SqlSession是相同的。
  • 二級緩存,又叫自定義緩存,實現(xiàn)了Cache接口的類都可以作為二級緩存,所以可配
    置如encache等的第三方緩存。二級緩存以namespace名稱空間為其唯一標識,被保
    存在Configuration核心配置對象中

注意:

二級緩存對象的默認類型為PerpetualCache,如果配置的緩存是默認類型,則mybatis會根據(jù)配置自動追加一系列裝飾器。

Cache對象之間的引用順序為:

SynchronizedCache–>LoggingCache–>SerializedCache–>ScheduledCache–>LruCache–>PerpetualCache

mybatis源碼 ------https://gitee.com/SmileSnake/...

參數(shù)資料
裝飾器模式概念
如果有侵權,馬上刪除

總結

以上是生活随笔為你收集整理的Mybatis之设计模式之装饰者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。