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

yipeiwu_com5年前PHP代码库
想实现这样一个功能:开展一个网站邀请活动,然后参与者(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与XML联手进行网站编程代码实例

一、小序    HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些...

php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍

shuffle()定义和用法 shuffle() 函数把数组中的元素按随机顺序重新排列。 若成功,则返回 TRUE,否则返回 FALSE。 注释:本函数为数组中的单元赋予新的键名。这将删...

php读取文件内容到数组的方法

本文实例讲述了php读取文件内容到数组的方法。分享给大家供大家参考。具体分析如下: php中可以通过file()函数将文件读取到数组中,数组中的元素即为文件的每行,file()函数通过"...

PHP登录验证码的实现与使用方法

PHP登录验证码的实现与使用方法

本文实例讲述了PHP登录验证码的实现与使用方法。分享给大家供大家参考,具体如下: 1. 新建code.php验证码生成文件 在此之前必须打开php的GD库,修改php.ini文件的配置,...

PHP中的访问修饰符简单比较

PHP中的访问修饰符简单比较

PHP public访问修饰符 示例: <?php header("content-type:text/html;charset=utf-8"); // BaseC...