溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP設計模式-策略模式Strategy

發(fā)布時間:2020-08-28 10:14:16 來源:網絡 閱讀:966 作者:侯施群 欄目:web開發(fā)

1.策略模式概念
策略模式針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,此模式讓算法的變化獨立于使用算法的客戶。從而讓程序結構更靈活,具有更好的擴展性和維護性
2.策略模式結構圖
PHP設計模式-策略模式Strategy
3.策略模式角色說明
    抽象策略(Strategy)角色:定義所有支持的算法的公共接口。通常是以一個接口或抽象來實現(xiàn)。Context使用這個接口來調用其ConcreteStrategy定義的算法。
    具體策略(ConcreteStrategy)角色:以Strategy接口實現(xiàn)某具體算法
    環(huán)境(Context)角色:持有一個Strategy類的引用,用一個ConcreteStrategy對象來配置
4.策略模式實例 

<?php
/**
 * 抽象策略角色,以接口實現(xiàn)
 */
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();
?>
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI