php設(shè)計(jì)模式 Strategy(策略模式)
抽象策略(Strategy)角色:定義所有支持的算法的公共接口。通常是以一個(gè)接口或抽象來實(shí)現(xiàn)。Context使用這個(gè)接口來調(diào)用其ConcreteStrategy定義的算法。
具體策略(ConcreteStrategy)角色:以Strategy接口實(shí)現(xiàn)某具體算法。
環(huán)境(Context)角色:持有一個(gè)Strategy類的引用,用一個(gè)ConcreteStrategy對(duì)象來配置
核心代碼
<?php interface Strategy { // 抽象策略角色,以接口實(shí)現(xiàn) public function algorithmInterface(); // 算法接口 } class ConcreteStrategyA implements Strategy { // 具體策略角色A public function algorithmInterface() {} } class ConcreteStrategyB implements Strategy { // 具體策略角色B public function algorithmInterface() {} } class ConcreteStrategyC implements Strategy { // 具體策略角色C public function algorithmInterface() {} } class Context { // 環(huán)境角色 private $_strategy; public function __construct(Strategy $strategy) { $this->_strategy = $strategy; } public function contextInterface() { $this->_strategy->algorithmInterface(); } } // client $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();
其他代碼
<?php /** * 策略模式(Strategy.php) * * 定義一系列算法,把它們一個(gè)個(gè)封裝起來,并且使它們可相互替換,使用得算法的變化可獨(dú)立于使用它的客戶 * */ // ---以下是一系列算法的封閉---- interface CacheTable { public function get($key); public function set($key,$value); public function del($key); } // 不使用緩存 class NoCache implements CacheTable { public function __construct(){ echo "Use NoCache<br/>"; } public function get($key) { return false; } public function set($key,$value) { return true; } public function del($key) { return false; } } // 文件緩存 class FileCache implements CacheTable { public function __construct() { echo "Use FileCache<br/>"; // 文件緩存構(gòu)造函數(shù) } public function get($key) { // 文件緩存的get方法實(shí)現(xiàn) } public function set($key,$value) { // 文件緩存的set方法實(shí)現(xiàn) } public function del($key) { // 文件緩存的del方法實(shí)現(xiàn) } } // TTServer class TTCache implements CacheTable { public function __construct() { echo "Use TTCache<br/>"; // TTServer緩存構(gòu)造函數(shù) } public function get($key) { // TTServer緩存的get方法實(shí)現(xiàn) } public function set($key,$value) { // TTServer緩存的set方法實(shí)現(xiàn) } public function del($key) { // TTServer緩存的del方法實(shí)現(xiàn) } } // -- 以下是使用不用緩存的策略 ------ class Model { private $_cache; public function __construct() { $this->_cache = new NoCache(); } public function setCache($cache) { $this->_cache = $cache; } } class UserModel extends Model { } class PorductModel extends Model { public function __construct() { $this->_cache = new TTCache(); } } // -- 實(shí)例一下 --- $mdlUser = new UserModel(); $mdlProduct = new PorductModel(); $mdlProduct->setCache(new FileCache()); // 改變緩存策略 ?>
具體的大家可以多關(guān)注一下腳本之家以前發(fā)布的文章
- 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)策略模式(strategy)
- PHP設(shè)計(jì)模式之策略模式(Strategy)入門與應(yīng)用案例詳解
- php設(shè)計(jì)模式之策略模式應(yīng)用案例詳解
- PHP設(shè)計(jì)模式之策略模式原理與用法實(shí)例分析
- php設(shè)計(jì)模式之策略模式實(shí)例分析【星際爭霸游戲案例】
- PHP實(shí)現(xiàn)的策略模式簡單示例
- PHP策略模式定義與用法示例
- PHP設(shè)計(jì)模式之觀察者模式(Observer)詳細(xì)介紹和代碼實(shí)例
- php設(shè)計(jì)模式 Template (模板模式)
- PHP常用的三種設(shè)計(jì)模式匯總
- php設(shè)計(jì)模式 Proxy (代理模式)
- PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對(duì)象行為型】
相關(guān)文章
關(guān)于PHPDocument 代碼注釋規(guī)范的總結(jié)
本篇文章是對(duì)PHPDocument代碼注釋規(guī)范進(jìn)行了詳細(xì)的總結(jié)與介紹,需要的朋友參考下2013-06-06

深入for,while,foreach遍歷時(shí)間比較的詳解

解析php中array_merge與array+array的區(qū)別

調(diào)整優(yōu)化您的LAMP應(yīng)用程序的5種簡單方法