<?php /** * 策略模式 * * 策略(Strategy)模式适用于你有一个可以用两个以上算法来解决的问题时候。解决方案的选择表现为用户做出的决定 * 这个模式也可以解决Web应用程序的多语言/风格表现问题 * * @author doodoo<[email protected]> */
/** * 字符串替换规则 * * 这个例子假设对一段文章的替换提供两种可选方案 */ 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; ?> 
|