《PHP教程:學(xué)習(xí)php設(shè)計模式 php實現(xiàn)策略模式(strategy)》要點:
本文介紹了PHP教程:學(xué)習(xí)php設(shè)計模式 php實現(xiàn)策略模式(strategy),希望對您有用。如果有疑問,可以聯(lián)系我們。
一、意圖
定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換.策略模式可以使算法可獨立于使用它的客戶而變化
策略模式變化的是算法
二、策略模式結(jié)構(gòu)圖PHP實例
PHP實例
三、策略模式中主要角色
抽象策略(Strategy)角色:定義所有支持的算法的公共接口.通常是以一個接口或抽象來實現(xiàn).Context使用這個接口來調(diào)用其ConcreteStrategy定義的算法
具體策略(ConcreteStrategy)角色:以Strategy接口實現(xiàn)某具體算法
環(huán)境(Context)角色:持有一個Strategy類的引用,用一個ConcreteStrategy對象來配置
四、策略模式的優(yōu)點和缺點
策略模式的優(yōu)點:
1、策略模式提供了管理相關(guān)的算法族的方法
2、策略模式提供了可以替換繼承關(guān)系的方法 將算封閉在獨立的Strategy類中使得你可以獨立于其Context改變它
3、使用策略模式可以避免使用多重條件轉(zhuǎn)移語句.
策略模式的缺點:
1、客戶必須了解所有的策略 這是策略模式一個潛在的缺點
2、Strategy和Context之間的通信開銷
3、策略模式會造成很多的策略類
五、策略模式適用場景
1、許多相關(guān)的類僅僅是行為有異.“策略”提供了一種用多個行為中的一個行為來配置一個類的方法
2、需要使用一個算法的不同變體.
3、算法使用客戶不應(yīng)該知道的數(shù)據(jù).可使用策略模式以避免暴露復(fù)雜的,與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)
4、一個類定義了多種行為,并且 這些行為在這個類的操作中以多個形式出現(xiàn).將相關(guān)的條件分支移和它們各自的Strategy類中以代替這些條件語句
六、策略模式與其它模式
Template模式:模板方法模式與策略模式的不同在于,策略模式使用委派的方法提供不同的算法行為,而模板方法使用繼承的方法提供不同的算法行為
享元模式(flyweight模式):如果有多個客戶端對象需要調(diào)用 同樣的一睦策略類的話,就可以使它們實現(xiàn)享元模式
七、策略模式PHP示例
PHP實例
<?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(); ?>
以上就是使用php實現(xiàn)策略模式的代碼,還有一些關(guān)于策略模式的概念區(qū)分,希望對大家的學(xué)習(xí)有所贊助.PHP實例
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP教程:學(xué)習(xí)php設(shè)計模式 php實現(xiàn)策略模式(strategy)》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8293.html