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


Posted in PHP onMarch 21, 2010

想实现这样一个功能:开展一个网站邀请活动,然后参与者(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 相关文章推荐
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
php将字符串转换为数组实例讲解
May 05 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 #PHP
ajax+php打造进度条 readyState各状态
Mar 20 #PHP
elgg 获取文件图标地址的方法
Mar 20 #PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 #PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 #PHP
php smarty函数扩展
Mar 15 #PHP
php Smarty date_format [格式化时间日期]
Mar 15 #PHP
You might like
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
php上传、管理照片示例
2006/10/09 PHP
dedecms中常见问题修改方法总结
2007/03/21 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
ThinkPHP之getField详解
2014/06/20 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
Python 在局部变量域中执行代码
2020/08/07 Python
django有哪些好处和优点
2020/09/01 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
聊城大学毕业生自荐书
2014/02/01 职场文书
暑期培训随笔感言
2014/03/10 职场文书
护士个人自我鉴定
2014/03/24 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
大学生志愿者心得体会
2016/01/15 职场文书