小白的設計模式之旅(終識—策略模式)

在上一篇中的裝飾者模式學習中,我學習到了一個新的技能就是通過對類的組裝來擴展對象的行為,今天我來再來學一篇新的設計模式-——策略模式,這個模式也是一個對象行為模式

1:什么是策略模式


定義:策略模式屬于對象的行為模式,用意是針對一組算法,然后將每一個算法封裝到具有共同接口的具體類中,從而是這些算法可以相互替換

應用場景:在我們的國家,上班族,公司的收入都需要繳稅,個人有個人所得稅計算公式,民營企業(yè)有民營企業(yè)的所得稅計算公式,外資企業(yè)有外資企業(yè)所得稅的計算方式,這些計算公式都不一樣,但是這些公式的責任都是一樣的,那就是完成,要交納給國家多少錢

場景分析:每一個計算公式都是一個具體的算法,而我們的國家就是一個所得稅計算公式的入口

類圖:

從類圖中我可以看出這個設計模式的核心就是Context 這個入口的類和Strategy這個算法抽象接口

2:如何實現(xiàn)策略模式


這個模式比較簡單,我們就不做過多的文字解釋,還是老規(guī)矩,直接寫code,(這幾個稅收的公式純屬demo演示,不是國家發(fā)布的標準)大家重在理解,策略模式的思想

1:創(chuàng)建稅收總入口類(Context)

2:創(chuàng)建算法的共同接口(Strategy)

3:創(chuàng)建個人所得稅的算法類

4:創(chuàng)建民營公司所得稅的算法類

5:創(chuàng)建外資企業(yè)所得稅的算法類

6:創(chuàng)建測試類

7:下圖是我門的測試結果

通過上面的測試結果,我門可以發(fā)現(xiàn),在整個設計過程中,

1):每一個算法都是獨立的,互不干涉的類,在具體的算法類中只是單純的維護了算法本身與他的職責進行了完全的分離。

2):每個算法的職責都維護在了我們的context類中,在這個類通過維護一個算法共同接口的引用使得具體的算法本身與算法的職責解耦合

3:策略模式在Spring 中的使用


在Spring 中實例化Bean的過程就是使用的策略模式,

AbstractAutowireCapableBeanFactory就等價于我們的context入口類,InstantiationStrategy是具體實例化Bean算法上層接口,SimpleInstantiationStrategyCglibSubclassingInstantiationStrategy是二個具體的實例化Bean對象的算法類,下面簡單的描述一下這幾個類的工作流程,更詳細的步鄹,大家可以看下spring的源碼。

AbstractAutowireCapableBeanFactory中的getInstantiationStrategy方法被觸發(fā)后,就會調用InstantiationStrategy中的instantiate,因為在CglibSubclassingInstantiationStrategy中沒有實現(xiàn)方法instantiate,所以會先調用父類的instantiate,然后在這個方法內根據類是否配置lookup-method或者replaced-method標簽或者@Lookup注解,而調用兩種不同的方式實例化bean。

4:策略模式的優(yōu)缺點


優(yōu)點:

? ? ? 通過將算法本身單獨的封裝使得每個算法之間可以自由切換

? ? ? 通過對具體算法的抽象使的整個模式的擴展性好,當有新的算法加入時只需要實現(xiàn)strategy接口即可

缺點:

? ? ? 策略類數量會大量增多,但復用性卻很小

? ? 所有的策略都需要對外暴露,上層模塊必須知道有哪些策略

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎的功能是IoC(控制反轉)容器,...
    simoscode閱讀 6,863評論 2 22
  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實現(xiàn)的控制反轉(IoC)...
    起名真是難閱讀 2,682評論 0 8
  • 1 場景問題# 1.1 報價管理## 向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復雜的問題,對不同的...
    七寸知架構閱讀 5,267評論 9 62
  • 微信公眾號“新世相”有一篇文章《永遠相信美好的事情不會發(fā)生》,大意是說因為誤信美好的事情總會發(fā)生,導致了一種虛妄的...
    酒心水晶閱讀 299評論 0 0

友情鏈接更多精彩內容