python 設計模式之策略模式

這幾天太忙了,都沒空寫,因此持續了好幾天。html

 

1.策略模式的定義:

策略模式定義了算法族,分別封裝起來,讓他們之間能夠互相替換,此模式讓算法的變化獨立於使用算法的客戶。python

通俗的講,也就是將那些使用的方法風別封裝成獨立的類,而後將這一類使用接口統一管理起來,讓須要使用這些方法的用戶可以隨時調用他們。算法

 

 

 

2.策略模式的結構

 

 

 3.策略模式的使用場景

  • 若是在一個系統裏面有許多類,它們之間的區別僅在於它們的行爲,那麼使用策略模式能夠動態地讓一個對象在許多行爲中選擇一種行爲。
  • 一個系統須要動態地在幾種算法中選擇一種。

 

 4. 策略模式的優勢

  • 算法能夠自由切換segmentfault

    • 改一下策略很方便設計模式

  • 擴展性良好工具

    • 增長一個策略,就多增長一個類就行了。設計

 

 

 5.策略模式的缺點

(被讚美着的每每也就是被綁架着的,有優勢必有缺點)htm

  • 策略類的數量增多對象

    • 每個策略都是一個類,複用的可能性很小、類數量增多blog

  • 全部的策略類都須要對外暴露

    • 上層模塊必須知道有哪些策略,而後才能決定使用哪個策略



 

6.使人想不明白的地方是:

 

策略模式還有一個Context上下文對象。這對象是用來幹什麼的呢?

《設計模式之禪》:

Context叫作上下文角色,起承上啓下封裝做用,屏蔽高層模塊對策略、算法的直接訪問,封裝可能存在的變化。

 

 

說白了,經過Person來調用更符合面向對象(屏蔽了直接對具體實現的訪問)。

首先要明白一個道理,就是——究竟是 「人」 旅遊,仍是火車、汽車、自行車、飛機這些交通工具旅遊?

若是沒有上下文的話,客戶端就必須直接和具體的策略實現進行交互了,尤爲是須要提供一些公共功能或者是存儲一些狀態的時候,會大大增長客戶端使用的難度;引入上下文以後,這部分工做能夠由上下文來完成,客戶端只須要和上下文進行交互就能夠了。這樣可讓策略模式更具備總體性,客戶端也更加的簡單

 https://www.zhihu.com/question/31162942

 

 

7.舉個例子

 

 

 

 

 

 

 

 

參考

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

相關文章
相關標籤/搜索