您的位置:首页 > 其它

策略模式

2015-10-11 11:11 447 查看
具体的解析

http://baike.baidu.com/link?url=AZUX6w2ISPESuLT3FDt0-uCC-StNP2_HXrOTUELZuDzuOBjC_iMCDKmQ45J7nNt2rBp-5LooEQz1wQGCaBstKq

其实策略模式,也是离不开耦合,策略模式,就是构建一个action(策略),而为了具有多个action的方法,我们将action的执行从本策略这个context中脱离,而创建一个公用的context来管理以及控制这里action(策略)

如:

class AirPlanelStrategy implements TravelStrategy{
public function travelAlgorithm(){
echo"travelbyAirPlain","<BR>\r\n";
}
}

而travelAlgorithm就是action,这个action不会在AirPlanelStrategy这个类的直接调用,其实这个类AirPlanelStrategy我们可以称呼为travelAlgorithm的context,现在我们为travelAlgorithm创建一个一对多的context,主要是来执行travelAlgorithm

class PersionContext{
private $_strategy = null;
public function __construct(TravelStrategy $travel){
$this -> _strategy = $travel;
}
public function TravelStrategy(TravelStrategy $travel){
$this -> _strategy = $travel;
}
public function  travel(){
return $this -> _strategy ->travelAlgorithm();
}
}


我们可以创建多个策略

<?php
interface TravelStrategy {
public function travelAlgorithm();
}

class AirPlanelStrategy implements TravelStrategy{ public function travelAlgorithm(){ echo"travelbyAirPlain","<BR>\r\n"; } }
class TrainStrategy implements TravelStrategy{
public function travelAlgorithm(){
echo"travelbyTrain","<BR>\r\n";
}
}

class BicycleStrategy implements TravelStrategy{
public function travelAlgorithm(){
echo"travelbyBicycle","<BR>\r\n";
}
}

class PersionContext{ private $_strategy = null; public function __construct(TravelStrategy $travel){ $this -> _strategy = $travel; } public function TravelStrategy(TravelStrategy $travel){ $this -> _strategy = $travel; } public function travel(){ return $this -> _strategy ->travelAlgorithm(); } }
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: