策略模式介紹
策略模式是一種行為設計模式,它能讓你定義一系列演算法,并將每種演算法分別放入獨立的類中,以使演算法的物件能夠相互替換,

策略模式建議找出負責用許多不同方式完成特定任務的類,然后將其中的演算法抽取到一組被稱為策略的獨立類中,
它將一組行為轉換為物件,并使其在原始背景關系物件內部能夠相互替換,原始物件就叫做背景關系,它包含指向策略物件的參考并將執行行為分派給策略物件,為了改變背景關系完成其作業的方式,其他物件可以使用另一個物件來替代當前鏈接的策略物件,
它會有一個背景關系類來關聯策略,通過一個成員變數存盤對于每種策略的參考,它只負責將作業委派給已連接的策略物件,其中客戶端在使用時會將具體的策略傳遞過來,此類不需要了解策略,它只需要通過同樣的通用介面與所有策略進行互動就可以,
策略模式結構
- 1、背景關系
其維護指向具體策略的參考,且僅通過策略介面與該物件進行交流,
- 2、策略介面
所有具體策略的通用介面,它宣告一個背景關系用于執行策略的方法,
- 3、具體策略
實作背景關系所用演算法的不同策略,當背景關系需要運行演算法時,它會在其已連接的策略物件上呼叫執行方法,(背景關系不了解策略,不關心自己呼叫了那個策略,)
- 4、客戶端
會創建一個特定策略物件并將其傳遞給背景關系,背景關系會通過某個方法,來使客戶端在運行時替換相關聯的策略,
適合應用場景
1、當想使用物件中不同的演算法變體,且希望在運行時切換演算法時,
2、當有許多僅在指向某些行為時略有不同相似類時,
3、若演算法在背景關系邏輯中不重要,使用該模式可以將類的業務邏輯與其演算法實作細節隔離開來,
實作方式
- 1、在背景關系類中找到變動頻率最高的演算法,宣告該演算法所有變體的通用策略介面,
- 2、在各自的類中逐一實作演算法(必須實作策略介面),
- 3、在背景關系類中通過成員變數來存盤策略物件(背景關系只能通過策略介面同策略物件進行互動),
- 4、客戶端需要將背景關系類和策略進行關聯,
滿足開閉原則;可以使用組合來代替繼承;可將演算法的實作與使用演算法的代碼隔離開;可在運行時切換物件內的演算法,
裝飾模式可讓你更改物件的外表,策略則讓你能夠修改其本質,
Demo
策略介面和實作策略的類

背景關系類

業務邏輯和顯示結果

可以從上面的顯示結果中可以看到,當在Main方法中,通過背景關系類context來呼叫策略實作類時,可以得到不同的顯示結果,這樣我們在實際的業務開發中就可以根據實際情況按需進行使用,可以達到將演算法和實際業務剝離的效果,減少彼此之間的耦合,而且也滿足開閉原則,我們在后期添加新演算法時,可以不用修改舊演算法,就可以實作功能,
小寄語
人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的,
原創不易,給個關注,
我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝,
作者:阿輝 關注我:微信掃描下面二維碼,6T編程資料免費送, 微信公眾號:Andy阿輝
寫一些程式員的所思所想,希望對你有幫助,
出處:http://www.cnblogs.com/netxiaoahui/ 著作權宣告:本文著作權歸作者和博客園共有,歡迎轉載,
但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308459.html
標籤:設計模式
上一篇:設計模式筆記(二):策略模式
下一篇:PHP設計模式—中介者模式
