php设计模式 Strategy(策略模式)
(编辑:jimmy 日期: 2024/11/30 浏览:3 次 )
抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。
具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法。
环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置
核心代码
<"htmlcode"><"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设计模式 Observer(观察者模式)