初次接触php抽象工厂模式(Elgg)

2015-01-24信息快讯网
想实现这样一个功能:开展一个网站邀请活动,然后参与者(owner)将推广的网站地址链接发给好友,好友点击链接后在网站注册成功,owner的邀请日志记录条数加1。
活动类 Activity
 
class Activity extends ElggEntity { 
private $strategy; //用于保存策略实例 
public function __construction($guid) { 
... 
$this->load($guid); //载入实体 
} 
public function addLog($data) { 
$this->strategy->addLog($data); //实际是 DEFAULTActivityStrategy::addLog($data) 
} 
public function load ($guid) { 
if (parent::load($guid)) { //此过程会将本实例的所有属性从数据库中赋值,因此 $this->strategyName的值已经被赋上了。 
if ($this->strategyName != '') { 
$this->strategy = AbstractActivityStrategy::getInstance($this->strategyName); //加载策略类 
} 
return true; 
} 
return false; 
} 
} 

日志类 ActivityLog
 
class ActivityLog extends ElggEntity { 
$private countValue; //邀请记录数 
... 
} 

策略类
说明:ElggEntity:所有实体基类。AbstractActivityStrategy:活动抽象类
)首先创建一个活动:
 
$activity = new Activity(); 
$activity->name = 'KKND'; //活动名称 
$activity->strategyName = 'DEFAULT'; //策略名称 
$activity->save(); //将活动类保存至数据库,新添加的属性(比如strategyName)也会保存 

)别人收到邀请,点击链接后,owner的邀请记录条目+1
比如邀请网址是 http://www.xinwusi.com/KKND/1234
其中/KKND/是活动名称,1234是owner的guid,假设该活动的guid为 8888,则
$activity = new Activity(8888); //获取活动实体
$activity->addLog($data); //添加邀请记录。$data包括owner的guid,活动的guid,活动名name等。
最后2行代码的过程,就是读取了该活动实体的策略名,并根据这个策略名生成一个策略实体,保存在自己的$stragety属性里,再调用其中的addLog方法增加日志记录。
以后有新活动的时候,直接把活动实例属性的策略名改了,就可以调用对应新策略中的方法了。
 
class DEFAULTActivityStrategy extends AbstractActivityStrategy { 
... 
public function addLog($data) { 
$activityLog = new ActivityLog(); 
... 
$activityLog->save(); 
$activityLogAmount = new ActivityLogAmount(); //计数类 
... 
$activityLogAmount->countValue += 1; 
$activityLogAmount->save(); 
} 
} 
php.ini中date.timezone设置分析
PHP中static关键字原理的学习研究分析
php max_execution_time执行时间问题
PHP array_multisort()函数的使用札记
php array_intersect比array_diff快(附详细的使用说明)
php header Content-Type类型小结
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
关于PHP中Object对象的笔记分享
php设计模式 Factory(工厂模式)
php设计模式 Chain Of Responsibility (职责链模式)
php设计模式 Prototype (原型模式)代码
php smarty 二级分类代码和模版循环例子
PHP中遍历stdclass object的实现代码
rephactor 优秀的PHP的重构工具
php smarty 二级分类代码和模版循环例子
php中在PDO中使用事务(Transaction)
php SQL Injection with MySQL
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
php运行出现Call to undefined function curl_init()的解决方法
PHP中10个不常见却非常有用的函数
PHP5与MySQL数据库操作常用代码 收集
php smarty函数扩展
php Smarty date_format [格式化时间日期]
PHP 最大运行时间 max_execution_time修改方法
PHP set_time_limit(0)长连接的实现分析
php microtime获取浮点的时间戳
PHP has encountered an Access Violation 错误的解决方法
PHP strtotime函数详解
php smarty模版引擎中变量操作符及使用方法
php smarty模版引擎中的缓存应用
Php 构造函数construct的前下划线是双的_
php smarty模版引擎中的缓存应用
php download.php实现代码 跳转到下载文件(response.redirect)
PHP PDO函数库(PDO Functions)第1/2页
php ignore_user_abort与register_shutdown_function 使用方法
php 无限级 SelectTree 类
smarty section简介与用法分析
©2014-2024 dbsqp.com