策略模式
2015-10-11 11:11
447 查看
具体的解析
http://baike.baidu.com/link?url=AZUX6w2ISPESuLT3FDt0-uCC-StNP2_HXrOTUELZuDzuOBjC_iMCDKmQ45J7nNt2rBp-5LooEQz1wQGCaBstKq
其实策略模式,也是离不开耦合,策略模式,就是构建一个action(策略),而为了具有多个action的方法,我们将action的执行从本策略这个context中脱离,而创建一个公用的context来管理以及控制这里action(策略)
如:
而travelAlgorithm就是action,这个action不会在AirPlanelStrategy这个类的直接调用,其实这个类AirPlanelStrategy我们可以称呼为travelAlgorithm的context,现在我们为travelAlgorithm创建一个一对多的context,主要是来执行travelAlgorithm
我们可以创建多个策略
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(); } }
?>
相关文章推荐
- 九、机器学习系统设计笔记之分类III:音乐体裁分类
- jstl标签的使用
- Android ViewPager多页面滑动切换以及动画效果
- word转化html
- 2015年6月数据库流行度排行榜
- Android应用程序注册广播接收器(registerReceiver)的过程分析
- 一道组合数取模题
- json使用
- Android高仿微信照片选择器+预览+显示照片
- git bash here 右键菜单失效后的修复方法
- X86在逻辑地址、线性地址、理解虚拟地址和物理地址
- jsp的el表达式使用
- mybatis04 根据用户名称模糊查询用户信息
- CentOS7上安装MySQL Workbench
- Docker 学习笔记(二)--Docker客户端和守护进程
- 八、机器学习系统设计笔记之对回归:改进的推荐
- JS实时时间显示
- The Highest Mark(01背包)
- 设置XShell快捷键 复制粘贴 并禁用智能选择
- HDU_5120 Intersection