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

來源:互聯網
上載者:User

想實現這樣一個功能:開展一個網站邀請活動,然後參與者(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();
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.