從Guava Splitter方法中學習策略模式

在閱讀Splitter方法的源碼過程中注意到它使用到了設計模式中的策略模式。
首先,我們來看策略模式的概念性介紹。
策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類裏面,作爲一個抽象策略類的子類。用一句話來說,就是:“準備一組算法,並將每一個算法封裝起來,使得它們可以互換”。 ——此段來自網絡。
從結果論看,策略模式即爲了使類的行爲或其核心算法能在運行時更改,根據不同場景適用不同的算法。
一般策略模式具備三要素:

  • 抽象策略
  • 具體策略
  • 環境
    聯繫Splitter方法我們來具體分析

Splitter
我們首先來看Strategy 是個什麼東西
私有接口
Strategy 是一個私有接口,屬於上文所說的三要素中的抽象策略

還注意到Splitter的構造方法私有化了,這一般是工廠模式的常用套路。
那我們來追蹤工廠方法在這裏插入圖片描述
靜態方法on爲Splitter提供的實例化方法,我們可以很直觀的看到這兩個用作實例化的工廠方法一個是爲正則服務,另外一個是CharMatcher服務,CharMatcher爲Guava內部定義的字符串匹配類。在這兩個用作實例化的工廠方法中我們可以很明顯的看到用匿名內部類的方式實現了不同的策略。

new Strategy() {
}

自然,這就是策略模式三要素中的具體策略
那三要素還剩一環境,環境指的是策略所依賴的類。

在設計模式中還有一個同樣對行爲或算法進行封裝的模式,叫模板模式
不同的是,模板模式是定義行爲或者算法的主要步驟,讓不同的子類去實現具體的步驟,它通常是一系列的動作和步驟,而策略模式只是一個動作或一個算法,可以把模板模式看做是戰略,策略模式看做是戰術。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章