<?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;
?>