PHP 设计模式 笔记与总结(8)策略模式
① 策略模式,將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境,這種模式就是策略模式。
② 實際應用舉例,假如一個電商網站系統,針對男性女性用戶要各自跳轉到不同的商品類目,并且所有廣告位展示不同的廣告。
?
在 Common 目錄下新建?UserStrategy.php,定義接口:
<?php namespace Common;//定義策略接口 interface UserStrategy{//顯示廣告function showAd();//展示類目function showCategory(); }在 Common 目錄下新建 FemaleUserStrategy.php ,女性用戶的策略實現:
<?php /** 女性用戶的策略實現*/ namespace Common; use Common\UserStrategy;class FemaleUserStrategy implements UserStrategy{function showAd(){echo '2015春夏新款女裝';}function showCategory(){echo '女裝';} }?
在 Common 目錄下新建 MaleUserStrategy.php ,男性用戶的策略實現:
<?php /** 男性用戶的策略實現*/ namespace Common; use Common\UserStrategy;class MaleUserStrategy implements UserStrategy{function showAd(){echo 'Apple Watch';}function showCategory(){echo '電子產品';} }?
入口文件 index.php:
<?php define('BASEDIR',__DIR__); //定義根目錄常量 include BASEDIR.'/Common/Loader.php'; spl_autoload_register('\\Common\\Loader::autoload');class Page{protected $strategy;function index(){echo 'AD:';$this->strategy->showAd();echo '<br>Category:';$this->strategy->showCategory();}//用于外部設置策略function setStrategy(\Common\UserStrategy $strategy){$this->strategy = $strategy;} }$page = new Page(); if(isset($_GET['female'])){$strategy = new \Common\FemaleUserStrategy(); }else{$strategy = new \Common\MaleUserStrategy(); } $page->setStrategy($strategy); $page->index();訪問?http://127.0.0.17/php/design/psr0/index.php?female
輸出:
AD:2015春夏新款女裝 Category:女裝訪問?http://127.0.0.17/php/design/psr0/index.php
輸出:
AD:Apple Watch Category:電子產品?
【策略模式的控制反轉】
③ 使用策略模式可以實現 Ioc,依賴倒置、控制反轉
在上例中 Page 類 依賴于?MaleUserStrategy 類和?FemaleUserStrategy 類。在 Page 類中不需要實現這兩個類,在執行的過程中,才將這個關系進行綁定。
?
==
如果兩個類是互相依賴的關系,那么它們之間就是一個緊耦合的設計,不利于替換其中某一個環節;而策略模式使用依賴倒置以后,就可以很方便地替換其中某一個類。
轉載于:https://www.cnblogs.com/dee0912/p/4417611.html
總結
以上是生活随笔為你收集整理的PHP 设计模式 笔记与总结(8)策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (操作系统题目题型总结)第六章:文件管理
- 下一篇: LeetCode篇之栈:155(常数时间