欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學習php設計模式 php實現策略模式(strategy)

 更新時間:2015年12月07日 16:32:42   作者:胖胖  
這篇文章主要介紹了php設計模式中的適配器模式,使用php實現適配器模式,感興趣的小伙伴們可以參考一下

一、意圖
定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。策略模式可以使算法可獨立于使用它的客戶而變化
策略模式變化的是算法
二、策略模式結構圖

三、策略模式中主要角色
抽象策略(Strategy)角色:定義所有支持的算法的公共接口。通常是以一個接口或抽象來實現。Context使用這個接口來調用其ConcreteStrategy定義的算法
具體策略(ConcreteStrategy)角色:以Strategy接口實現某具體算法
環(huán)境(Context)角色:持有一個Strategy類的引用,用一個ConcreteStrategy對象來配置
四、策略模式的優(yōu)點和缺點
策略模式的優(yōu)點:
1、策略模式提供了管理相關的算法族的辦法
2、策略模式提供了可以替換繼承關系的辦法 將算封閉在獨立的Strategy類中使得你可以獨立于其Context改變它
3、使用策略模式可以避免使用多重條件轉移語句。
策略模式的缺點:
1、客戶必須了解所有的策略 這是策略模式一個潛在的缺點
2、Strategy和Context之間的通信開銷
3、策略模式會造成很多的策略類
五、策略模式適用場景
1、許多相關的類僅僅是行為有異?!安呗浴碧峁┝艘环N用多個行為中的一個行為來配置一個類的方法
2、需要使用一個算法的不同變體。
3、算法使用客戶不應該知道的數據??墒褂貌呗阅J揭员苊獗┞稄碗s的,與算法相關的數據結構
4、一個類定義了多種行為,并且 這些行為在這個類的操作中以多個形式出現。將相關的條件分支移和它們各自的Strategy類中以代替這些條件語句
六、策略模式與其它模式
Template模式:模板方法模式與策略模式的不同在于,策略模式使用委派的方法提供不同的算法行為,而模板方法使用繼承的方法提供不同的算法行為
享元模式(flyweight模式):如果有多個客戶端對象需要調用 同樣的一睦策略類的話,就可以使它們實現享元模式
七、策略模式PHP示例

<?php
/**
 * 抽象策略角色,以接口實現
 */
interface Strategy {
 
  /**
   * 算法接口
   */
  public function algorithmInterface();
}
 
/**
 * 具體策略角色A
 */
class ConcreteStrategyA implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface A<br />';
  }
}
 
/**
 * 具體策略角色B
 */
class ConcreteStrategyB implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface B<br />';
  }
}
 
/**
 * 具體策略角色C
 */
class ConcreteStrategyC implements Strategy {
 
  public function algorithmInterface() {
    echo 'algorithmInterface C<br />';
  }
}
 
/**
 * 環(huán)境角色
 */
class Context {
  /* 引用的策略 */
  private $_strategy;
 
  public function __construct(Strategy $strategy) {
    $this->_strategy = $strategy;
  }
 
  public function contextInterface() {
    $this->_strategy->algorithmInterface();
  }
 
}
 
/**
 * 客戶端
 */
class Client {
 
  /**
   * Main program.
   */
  public static function main() {
    $strategyA = new ConcreteStrategyA();
    $context = new Context($strategyA);
    $context->contextInterface();
 
    $strategyB = new ConcreteStrategyB();
    $context = new Context($strategyB);
    $context->contextInterface();
 
    $strategyC = new ConcreteStrategyC();
    $context = new Context($strategyC);
    $context->contextInterface();
  }
 
}
 
Client::main();
?>

以上就是使用php實現策略模式的代碼,還有一些關于策略模式的概念區(qū)分,希望對大家的學習有所幫助。

相關文章

  • PHP實現抓取HTTPS內容

    PHP實現抓取HTTPS內容

    這篇文章主要介紹了PHP實現抓取HTTPS內容,以及遇到的問題的解決方法,需要的朋友可以參考下
    2014-12-12
  • 詳解php用static方法的原因

    詳解php用static方法的原因

    這篇文章給大家分享了關于在PHP中使用static方法的原因以及相關實例代碼,有需要的朋友們參考下。
    2018-09-09
  • php中時間函數date及常用的時間計算

    php中時間函數date及常用的時間計算

    本篇文章主要介紹了php中時間函數date及常用的時間計算的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • php使用Jpgraph繪制復雜X-Y坐標圖的方法

    php使用Jpgraph繪制復雜X-Y坐標圖的方法

    這篇文章主要介紹了php使用Jpgraph繪制復雜X-Y坐標圖的方法,通過設置圖像陰影、邊距、字體、顏色、曲線等實現Jpgraph繪制復雜坐標圖的功能,非常簡單實用,需要的朋友可以參考下
    2015-06-06
  • PHP實現的簡單操作SQLite數據庫類與用法示例

    PHP實現的簡單操作SQLite數據庫類與用法示例

    這篇文章主要介紹了PHP實現的簡單操作SQLite數據庫類與用法,結合具體實例形式分析了php封裝的針對SQLite數據庫相關增刪改查操作技巧與使用方法,需要的朋友可以參考下
    2017-06-06
  • PHP從零開始打造自己的MVC框架之類的自動加載實現方法詳解

    PHP從零開始打造自己的MVC框架之類的自動加載實現方法詳解

    這篇文章主要介紹了PHP從零開始打造自己的MVC框架之類的自動加載實現方法,結合具體實例形式詳細分析了MVC框架類的自動加載原理、定義、實現方法及相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • 兩級聯動select刷新后其值保持不變的實現方法

    兩級聯動select刷新后其值保持不變的實現方法

    兩級聯動select刷新后,select值保持不變即點擊提交按鈕后,頁面select中繼續(xù)維持提交前的值,下面有個不錯的示例,大家可以參考下
    2014-01-01
  • dedecms中顯示數字驗證碼的修改方法

    dedecms中顯示數字驗證碼的修改方法

    dedecms中顯示數字驗證碼的修改方法...
    2007-03-03
  • PHP使用PDO從mysql讀取大量數據處理詳解

    PHP使用PDO從mysql讀取大量數據處理詳解

    這篇文章主要給大家介紹了關于PHP使用PDO從mysql讀取大量數據處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-03-03
  • php生成并下載word文件到本地實現方法詳解

    php生成并下載word文件到本地實現方法詳解

    要給最常用出租屋管理系統(tǒng)增加個合同功能,mark下知識點。要生成合同就需要使用phpword。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論