最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)策略模式(strategy)

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

一、意圖
定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可相互替換。策略模式可以使算法可獨(dú)立于使用它的客戶而變化
策略模式變化的是算法
二、策略模式結(jié)構(gòu)圖

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

<?php
/**
 * 抽象策略角色,以接口實(shí)現(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();
?>

以上就是使用php實(shí)現(xiàn)策略模式的代碼,還有一些關(guān)于策略模式的概念區(qū)分,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論

泗水县| 漳州市| 东平县| 普定县| 志丹县| 五寨县| 宣武区| 尚志市| 教育| 邮箱| 江油市| 寿宁县| 青冈县| 奎屯市| 伊宁市| 古蔺县| 连云港市| 德清县| 瑞丽市| 康定县| 祁东县| 乡宁县| 河源市| 卢湾区| 六盘水市| 许昌县| 旬邑县| 宁明县| 塘沽区| 巩义市| 类乌齐县| 达拉特旗| 东兰县| 朝阳市| 湘乡市| 澎湖县| 山东省| 武宣县| 营山县| 旬阳县| 耿马|