這幾天太忙了,都沒空寫,因此持續了好幾天。html
策略模式定義了算法族,分別封裝起來,讓他們之間能夠互相替換,此模式讓算法的變化獨立於使用算法的客戶。python
通俗的講,也就是將那些使用的方法風別封裝成獨立的類,而後將這一類使用接口統一管理起來,讓須要使用這些方法的用戶可以隨時調用他們。算法
算法能夠自由切換segmentfault
改一下策略很方便設計模式
擴展性良好工具
增長一個策略,就多增長一個類就行了。設計
(被讚美着的每每也就是被綁架着的,有優勢必有缺點)htm
策略類的數量增多對象
每個策略都是一個類,複用的可能性很小、類數量增多blog
全部的策略類都須要對外暴露
上層模塊必須知道有哪些策略,而後才能決定使用哪個策略
策略模式還有一個Context上下文對象。這對象是用來幹什麼的呢?
《設計模式之禪》:
Context叫作上下文角色,起承上啓下封裝做用,屏蔽高層模塊對策略、算法的直接訪問,封裝可能存在的變化。
說白了,經過Person來調用更符合面向對象(屏蔽了直接對具體實現的訪問)。
首先要明白一個道理,就是——究竟是 「人」 旅遊,仍是火車、汽車、自行車、飛機這些交通工具旅遊?
若是沒有上下文的話,客戶端就必須直接和具體的策略實現進行交互了,尤爲是須要提供一些公共功能或者是存儲一些狀態的時候,會大大增長客戶端使用的難度;引入上下文以後,這部分工做能夠由上下文來完成,客戶端只須要和上下文進行交互就能夠了。這樣可讓策略模式更具備總體性,客戶端也更加的簡單
https://www.zhihu.com/question/31162942
參考
http://www.imooc.com/article/270302
https://www.cnblogs.com/onepiece-andy/p/python-strategy.html
https://segmentfault.com/a/1190000011918366
https://www.jianshu.com/p/c59d75de1c54
https://www.cnblogs.com/whgk/p/6087064.html