<?PHP
/**
* 策略模式
*
* 策略(Strategy)模式適用於你有一個可以用兩個以上算法來解決的問題時候。解決方案的選擇表現為用戶做出的決定
* 這個模式也可以解決Web應用程序的多語言/風格表現問題
*
* @author doodoo<pwtitle@gmail.com>
*/
/**
* 字符串替換規則
*
* 這個例子假設對一段文章的替換提供兩種可選方案
*/
interface ReplaceRule{
public function replace();
}
/**
* 方案一
*/
class ReplaceRuleOne implements ReplaceRule {
public function replace(){
$subject = str_replace("ABC","doodoo","這是待替換文本!ABC");
return $subject;
}
}
/**
* 方案二
*/
class ReplaceRuleTwo implements ReplaceRule {
public function replace(){
$subject = str_replace("ABC","PanWei","這是待替換文本!ABC");
return $subject;
}
}
/**
* 算法解決類,以提供客戶選擇使用何種解決方案
*/
class Solve{
private $strategy = null;
public function __construct(ReplaceRule $rule){
$this->strategy = $rule;
}
/**
* 取得替換後的內容
*/
public function getContext(){
return $this->strategy->replace();
}
}
// 調用第一種算法
$solve = new Solve(new ReplaceRuleOne());
$str = $solve->getContext();
echo $str;
echo "<BR>\r\n";
// 調用第二種算法
$solve = new Solve(new ReplaceRuleTwo());
$str = $solve->getContext();
echo $str;
?>