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

 更新时间:2010年03月21日 15:42:14   作者:  
这两天在开发用elgg作为基础的sns网站时,第一次遇到了策略模式的运用。
想实现这样一个功能:开展一个网站邀请活动,然后参与者(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+js实现的拖动滑块验证码验证表单操作示例【附源码下载】

    php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】

    这篇文章主要介绍了php+js实现的拖动滑块验证码验证表单操作,结合实例形式分析了php+js拖动滑块验证码验证表单操作基本功能实现与使用相关操作技巧,需要的朋友可以参考下
    2020-05-05
  • php读取html并截取字符串的简单代码

    php读取html并截取字符串的简单代码

    一般php采集代码能用的到,这里只是简单的实现代码。
    2009-11-11
  • php实现的CSS更新类实例

    php实现的CSS更新类实例

    这篇文章主要介绍了php实现的CSS更新类及其用法实例,包括了针对模板文件的检查、更新与替换模板文件等功能,非常实用,需要的朋友可以参考下
    2014-09-09
  • PHP获取客户端及服务器端IP的封装类

    PHP获取客户端及服务器端IP的封装类

    这篇文章主要介绍了PHP获取客户端及服务器端IP的封装类,简单分析了php使用服务器预定义变量的基本用法并进行了简单封装,需要的朋友可以参考下
    2016-07-07
  • php利用cookie实现自动登录的方法

    php利用cookie实现自动登录的方法

    这篇文章主要介绍了php利用cookie实现自动登录的方法,涉及针对cookie的读取判断及登陆操作,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • PHP与Java对比学习日期时间函数

    PHP与Java对比学习日期时间函数

    本文给大家介绍的是从Java和PHP进行对比复习了下日期时间的处理函数,并给出了一些示例,希望对大家能够有所帮助
    2016-07-07
  • PHP试题之RCEService正则回溯解答

    PHP试题之RCEService正则回溯解答

    这篇文章主要为大家介绍了PHP试题之RCEService正则回溯解答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • How do I change MySQL timezone?

    How do I change MySQL timezone?

    The MySQL timezone is set to MST (-7 hours GMT/UTC) and is not configurable by you. MySQL is only capable of having 1 timezone setting per mysql daemon. Therefore, you cannot select NOW() and expect a result in a timezone other than MST.
    2008-03-03
  • PHP临时文件的安全性分析

    PHP临时文件的安全性分析

    这篇文章主要介绍了PHP临时文件的安全性分析,对于临时文件的安全性及防范措施作出了比较详细的阐述,需要的朋友可以参考下
    2014-07-07
  • php版本的cron定时任务执行器使用实例

    php版本的cron定时任务执行器使用实例

    这篇文章主要介绍了php版本的cron定时任务执行器使用实例,是非常实用的一个功能,需要的朋友可以参考下
    2014-08-08

最新评论