最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

初次接觸php抽象工廠模式(Elgg)

 更新時間:2010年03月21日 15:42:14   作者:  
這兩天在開發(fā)用elgg作為基礎(chǔ)的sns網(wǎng)站時,第一次遇到了策略模式的運用。
想實現(xiàn)這樣一個功能:開展一個網(wǎng)站邀請活動,然后參與者(owner)將推廣的網(wǎng)站地址鏈接發(fā)給好友,好友點擊鏈接后在網(wǎng)站注冊成功,owner的邀請日志記錄條數(shù)加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)) { //此過程會將本實例的所有屬性從數(shù)據(jù)庫中賦值,因此 $this->strategyName的值已經(jīng)被賦上了。
if ($this->strategyName != '') {
$this->strategy = AbstractActivityStrategy::getInstance($this->strategyName); //加載策略類
}
return true;
}
return false;
}
}

日志類 ActivityLog
復制代碼 代碼如下:

class ActivityLog extends ElggEntity {
$private countValue; //邀請記錄數(shù)
...
}

策略類
說明:ElggEntity:所有實體基類。AbstractActivityStrategy:活動抽象類
)首先創(chuàng)建一個活動:
復制代碼 代碼如下:

$activity = new Activity();
$activity->name = 'KKND'; //活動名稱
$activity->strategyName = 'DEFAULT'; //策略名稱
$activity->save(); //將活動類保存至數(shù)據(jù)庫,新添加的屬性(比如strategyName)也會保存

)別人收到邀請,點擊鏈接后,owner的邀請記錄條目+1
比如邀請網(wǎng)址是 http://www.xinwusi.com/KKND/1234
其中/KKND/是活動名稱,1234是owner的guid,假設(shè)該活動的guid為 8888,則
$activity = new Activity(8888); //獲取活動實體
$activity->addLog($data); //添加邀請記錄。$data包括owner的guid,活動的guid,活動名name等。
最后2行代碼的過程,就是讀取了該活動實體的策略名,并根據(jù)這個策略名生成一個策略實體,保存在自己的$stragety屬性里,再調(diào)用其中的addLog方法增加日志記錄。
以后有新活動的時候,直接把活動實例屬性的策略名改了,就可以調(diào)用對應新策略中的方法了。
復制代碼 代碼如下:

class DEFAULTActivityStrategy extends AbstractActivityStrategy {
...
public function addLog($data) {
$activityLog = new ActivityLog();
...
$activityLog->save();
$activityLogAmount = new ActivityLogAmount(); //計數(shù)類
...
$activityLogAmount->countValue += 1;
$activityLogAmount->save();
}
}

相關(guān)文章

最新評論

吉首市| 沭阳县| 格尔木市| 德昌县| 岢岚县| 桂阳县| 南漳县| 淳安县| 应用必备| 松江区| 阜阳市| 安新县| 五家渠市| 原平市| 宜良县| 昌都县| 苍溪县| 灵丘县| 亳州市| 阿坝县| 盖州市| 盖州市| 将乐县| 苏尼特左旗| 宝山区| 宁河县| 洛扎县| 龙南县| 平泉县| 贡山| 高邑县| 长岭县| 湘西| 兴海县| 罗甸县| 陵川县| 红河县| 乐平市| 集贤县| 建湖县| 东丽区|