具体的解析
其实策略模式,也是离不开耦合,策略模式,就是构建一个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();
}
}
?>