您好,登錄后才能下訂單哦!
1.策略模式概念
策略模式針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,此模式讓算法的變化獨立于使用算法的客戶。從而讓程序結構更靈活,具有更好的擴展性和維護性
2.策略模式結構圖
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(); ?>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。