PHP策略模式
1、什么是策略模式?
定義:將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境,並讓它們可以相互替換,這種模式就是策略模式。
簡單理解就是 有n個做法供你選擇,根據你的需要選擇某個策略得到結果
2、為什么要用策略模式?
使用設計模式之后,我們的代碼冗余和耦合度變低,每個策略模塊完成對應的功能。
當然缺點就是一個功能我們就要響應制作一個策略類,但是我們統觀MVC架構當中(ThinkPHP,Yii2),一個控制器對應一個視圖,其實也是策略設計模式的體現了。
3、示例代碼
業務場景
在一個電商網站中,根據用戶的性別來展示不同的商品。我們有展示商品的類目(function showCategory())和展示的廣告(function showAd())
實現方式
首先我們要定義一個接口,接口中定義需要實現的方法。
然后分別定義不同的類來實現接口中的方法。
最后在根據用戶的不同,分別 new 不同的方法。
/** * @purpose: 父類接口 * Interface UserInterface */ interface UserInterface { /** * @purpose: 展示廣告 * @return mixed */ public function showAd(); /** * @purpose: 展示商品分類 * @return mixed */ public function showCatetory(); } /** * @purpose: 男性用戶實現用戶接口 * Class MaleUser */ class MaleUser implements UserInterface { /** * @purpose: 展示廣告 * @return mixed */ public function showAd() { echo "電子產品"; } /** * @purpose: 展示商品分類 * @return mixed */ public function showCatetory() { echo "電腦數碼"; } } /** * @purpose: 女性用戶實現用戶接口 * Class FemaleUser */ class FemaleUser implements UserInterface { /** * @purpose: 展示廣告 * @return mixed */ public function showAd() { echo "化妝品"; } /** * @purpose: 展示商品分類 * @return mixed */ public function showCatetory() { echo "服裝分類"; } } if ($_GET['male']){ $user = new MaleUser(); } else { $user = new FemaleUser(); } $user->showAd(); //會根據用戶的性別展示各自的廣告內容
4、小結
總的來說,我們在開發中的設計原則如下:
- 找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起;
- 針對接口編程,不針對實現編程;
- 多用組合,少用繼承。
本文為袋鼠學習中的總結,如有轉載請注明出處:https://www.cnblogs.com/chrdai/p/11184082.html