政策模式定義了算法家族,分别封裝起來,讓他們之間可以互相替換,此模式讓算法的變化不會影響到使用算法的客戶。
在了解政策模式之前,我們先來一個例子,一般情況下,如果我們要做資料合法性驗證,很多時候都是按照swith語句來判斷,但是這就帶來幾個問題,首先如果增加需求的話,我們還要再次修改這段代碼以增加邏輯,而且在進行單元測試的時候也會越來越複雜,代碼如下:
那如何來避免上述代碼中的問題呢,根據政策模式,我們可以将相同的工作代碼單獨封裝成不同的類,然後通過統一的政策處理類來處理,OK,我們先來定義政策處理類,代碼如下:
然後剩下的工作,就是定義types裡存放的各種驗證類了,我們這裡隻舉幾個例子:
使用的時候,我們首先要定義需要驗證的資料集合,然後還需要定義每種資料需要驗證的規則類型,代碼如下:
最後,擷取驗證結果的代碼就簡單了:
政策模式定義了一系列算法,從概念上來說,所有的這些算法都是做相同的事情,隻是實作不同,他可以以相同的方式調用所有的方法,減少了各種算法類與使用算法類之間的耦合。
從另外一個層面上來說,單獨定義算法類,也友善了單元測試,因為可以通過自己的算法進行單獨測試。
實踐中,不僅可以封裝算法,也可以用來封裝幾乎任何類型的規則,是要在分析過程中需要在不同時間應用不同的業務規則,就可以考慮是要政策模式來處理各種變化。
http://www.cnblogs.com/TomXu/archive/2012/03/05/2358552.html