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對象來配置

核心代碼
<?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詳解【對象行為型】
相關(guān)文章
關(guān)于PHPDocument 代碼注釋規(guī)范的總結(jié)
本篇文章是對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種簡單方法

