php设计模式 Strategy(策略模式)


Posted in PHP onJune 26, 2011

抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。

具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法。

环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置

php设计模式 Strategy(策略模式)

核心代码

<?php
interface Strategy { // 抽象策略角色,以接口实现
  public function algorithmInterface(); // 算法接口
}

class ConcreteStrategyA implements Strategy { // 具体策略角色A 
  public function algorithmInterface() {}
}

class ConcreteStrategyB implements Strategy { // 具体策略角色B 
  public function algorithmInterface() {}
}

class ConcreteStrategyC implements Strategy { // 具体策略角色C
  public function algorithmInterface() {}
}

class Context { // 环境角色
  private $_strategy;
  public function __construct(Strategy $strategy) {
    $this->_strategy = $strategy;
  } 
  public function contextInterface() {
    $this->_strategy->algorithmInterface();
  }
}

// client
$strategyA = new ConcreteStrategyA();
$context = new Context($strategyA);
$context->contextInterface();

$strategyB = new ConcreteStrategyB();
$context = new Context($strategyB);
$context->contextInterface();

$strategyC = new ConcreteStrategyC();
$context = new Context($strategyC);
$context->contextInterface();

其他代码

<?php 
/** 
* 策略模式(Strategy.php) 
* 
* 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换,使用得算法的变化可独立于使用它的客户 
* 
*/ 

// ---以下是一系列算法的封闭---- 
interface CacheTable 
{ 
public function get($key); 
public function set($key,$value); 
public function del($key); 
} 

// 不使用缓存 
class NoCache implements CacheTable 
{ 
public function __construct(){ 
echo "Use NoCache<br/>"; 
} 

public function get($key) 
{ 
return false; 
} 

public function set($key,$value) 
{ 
return true; 
} 

public function del($key) 
{ 
return false; 
} 
} 

// 文件缓存 
class FileCache implements CacheTable 
{ 
public function __construct() 
{ 
echo "Use FileCache<br/>"; 
// 文件缓存构造函数 
} 

public function get($key) 
{ 
// 文件缓存的get方法实现 
} 

public function set($key,$value) 
{ 
// 文件缓存的set方法实现 
} 

public function del($key) 
{ 
// 文件缓存的del方法实现 
} 
} 

// TTServer 
class TTCache implements CacheTable 
{ 
public function __construct() 
{ 
echo "Use TTCache<br/>"; 
// TTServer缓存构造函数 
} 

public function get($key) 
{ 
// TTServer缓存的get方法实现 
} 

public function set($key,$value) 
{ 
// TTServer缓存的set方法实现 
} 

public function del($key) 
{ 
// TTServer缓存的del方法实现 
} 
} 

// -- 以下是使用不用缓存的策略 ------ 
class Model 
{ 
private $_cache; 
public function __construct() 
{ 
$this->_cache = new NoCache(); 
} 

public function setCache($cache) 
{ 
$this->_cache = $cache; 
} 
} 

class UserModel extends Model 
{ 
} 

class PorductModel extends Model 
{ 
public function __construct() 
{ 
$this->_cache = new TTCache(); 
} 
} 

// -- 实例一下 --- 
$mdlUser = new UserModel(); 
$mdlProduct = new PorductModel(); 
$mdlProduct->setCache(new FileCache()); // 改变缓存策略 
?>

 具体的大家可以多关注一下三水点靠木以前发布的文章

PHP 相关文章推荐
mysql数据库差异比较的PHP代码
Feb 05 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
PHP实现的回溯算法示例
Aug 15 PHP
php设计模式 Observer(观察者模式)
Jun 26 #PHP
php设计模式 Singleton(单例模式)
Jun 26 #PHP
php设计模式 Command(命令模式)
Jun 26 #PHP
php设计模式 Template (模板模式)
Jun 26 #PHP
php设计模式 Proxy (代理模式)
Jun 26 #PHP
php设计模式 Composite (组合模式)
Jun 26 #PHP
php设计模式 State (状态模式)
Jun 26 #PHP
You might like
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python控制Firefox方法总结
2019/06/03 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Python实现括号匹配方法详解
2020/02/10 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
本科毕业自我鉴定
2014/03/20 职场文书
单位综合评价意见
2015/06/05 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python