载。尤其在基类CacheWriter是在另外 一个文件定义的时候。负载增加得稍微多一些。)
基类CacheWriter 调用了store() 方式函数来 引入文件处理资源和参数来进行存储。每一个实际的类都从执行store()函数, 但是不同的实例在store ()函数里面使用的运算法则是不一样的,以便不同的数据类型生成的$cached_content是不同的。每一个 运算法则被当作一个单独的类来运行。
前面的例子中的代码被替换为:
132
The Strategy Pattern
class VarCache {
// ...
function _getTemplate() {
$template = ‘<?php $cached_content = ‘;
switch ($this->_type) {
case ‘string’:
$template .= “‘%s’;”;
break;
}
// ...
}
function set($value) {
$file_handle = fopen($this->_name.’.php’, ‘w’);
switch ($this->_type) {
case ‘string’:
$content = sprintf($this->_getTemplate()
,str_replace (“‘“,”\\’”,$value));
break;
// ...
}
fwrite($file_handle, $content);
fclose($file_handle);
}
}
针 对每一个缓存的数据来型,你需要实例出相对应的_getTemplate() 和
set() 方式函数到相对应 的类当中。这里是StringCacheWriter:
class StringCacheWriter /* implements CacheWriter */ {
function store($file_handle, $string) {
$content = sprintf(
“<?php\n\$cached_content = ‘%s’;”
,str_replace(“‘“,”\\’”,$string));
fwrite($file_handle, $contents);
}
}
(因为PHP 4不支持接口的使用,这里接口 只是用注释来简单描述一下。)
这里我们得到另外一个运算法则存储“策略”。
class NumericCacheWriter /* implements CacheWriter */ {
function store($file_handle, $numeric) {
$content = sprintf(“<?php\n\$cached_content = %s;”
,(double)$numeric);
The Strategy Pattern 133
fwrite($file_handle, $content);
}
}
class SerializingCacheWriter /* implements CacheWriter */ {
function store($file_handle, $var) {
$content = sprintf(
“<?php\n\$cached_content = unserialize(stripslashes(‘%s’));”
,addslashes(serialize($var)));
fwrite($file_handle, $content);
}
}
通过把运算法则封装到交互的类中(同样的API,多形性), 你现在可以回过头来通过策略设计模式重新执行VarCache()类。这个时候经过条件分解但是与原来非常 类似的代码可以继续运行了。
class VarCache {
var
php设计模式介绍之策略模式 - 凌众科技
快速业务通道
php设计模式介绍之策略模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
|
content |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|
|
|
name;
var
php设计模式介绍之策略模式 - 凌众科技
快速业务通道
php设计模式介绍之策略模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
|
content |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|
|
|
type;
function VarCache($name, $type=’serialize’) {
$this- >_name = ‘cache/’.$name;
switch (strtolower($type)) {
case ‘string’: $strategy = ‘String’; break; case ‘numeric’: $strategy = ‘Numeric’; break; case ‘serialize’:
default: $strategy = ‘Serializing’;
}
$strategy .= ‘CacheWriter’;
$this->_type =& new $strategy;
}
function isValid() {
return file_exists($this- >_name.’.php’);
}
function get() {
if ($this->isValid ()) {
include $this->_name.’.php’;
return $cached_content;
}
}
function set($value) {
$file_handle = fopen($this- >
|