策略模式:將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境,這種模式就是策略模式
使用策略模式實現Ioc, 依賴倒置, 控制反轉
假如一個電商網站系統,針對不同的人群要跳轉到不同的商品類目,并且所有廣告位展示不同的廣告
1.不會因為上下文的改變而改變代碼(傳統都是使用 if else 來判斷)
2.如果新增加一種類型的用戶,只需要增加一種策略就好了,不需要在代碼中 if else 里面在繼續添加邏輯
3.不同的地方只需要執行不同的策略就好了,這樣即可解決問題
4.從硬編碼到解耦的使用
5.最主要的是解決了程序中的分支邏輯
interface UserStrategy { function showAd(); function showCategory();}
5.2定義女性用戶的策略
html' target='_blank'>class FemaleUserStrategy implements UserStrategy { function showAd() { echo '2014新款女裝'; } function showCategory() { echo '服裝'; }}
5.3定義男性用戶的策略
class MaleUserStrategy implements UserStrategy { function showAd() { echo 'IPhone6'; } function showCategory() { echo '電子產品'; }}
6. 頁面展示與使用
class Page{ //保存策略對象 protected $strategy; //首頁信息輸出 function index(){ //傳統寫法,與輸出 if (isset($_GET['famale'])) { echo '女性'; }else if (isset($_GET['famale'])) { echo '男性'; } //如果新增了業務邏輯后面會很多的 if else //策略模式的輸出 echo $this->strategy->showAd(); echo '<br>'; echo $this->strategy->showCategory(); } //策略模式來解決,注冊策略 function setStrategy(UserStrategy $strategy){ $this->strategy = $strategy; }}//執行$page = new Page;//這里根據實際上下文的環境if (isset($_GET['famale'])) { $strategy = new FemaleUserStrategy();}else if (isset($_GET['famale'])) { $strategy = new MaleUserStrategy();}//使依賴關系反轉,最終執行在使用關系綁定,輸出結果(解決了傳統寫法的耦合問題)$page->setStrategy($strategy);$page->index();
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答