1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<code><?php</code>
<code>/**</code>
<code>* 政策模式</code>
<code>需求:想實作這樣一個功能:</code>
<code>開展一個網站邀請活動,然後參與者将推廣的網站位址連結發給好友,好友點選連結後在網站注冊成功,的邀請日志記錄條數加1</code>
<code>這樣我們實作了</code>
<code>主體(Activity)、</code>
<code>政策(AbstractActivityStrategy -> DEFAULTActivityStrategy)、</code>
<code>行為(ActivityLog、ActivityLogAmount)的分離。</code>
<code>1:如果産品人員現在決定不要計數這個功能,那我們隻需修改 政策 子產品。</code>
<code>2:如果決定邀請到一個人數字加2 ,我們則隻需修改 相應的行為類。</code>
<code>3:在如果這個産品人員實在變态,把邀請的整個邏輯都改了,那我們隻需要增加相應的政策類,然後增加行為(如果存在就不必增加),</code>
<code>主體始終是不需要修改的。</code>
<code>*/</code>
<code>* 活動主體類</code>
<code>class</code> <code>Activity {</code>
<code>private</code> <code>$strategy</code><code>; </code><code>//用于儲存政策執行個體</code>
<code>public</code> <code>$strategyName</code> <code>= </code><code>'DEFAULTActivityStrategy'</code><code>;</code>
<code>public</code> <code>function</code> <code>__construct(</code><code>$strategyName</code><code>) {</code>
<code>if</code><code>(!</code><code>empty</code><code>(</code><code>$strategyName</code><code>)){</code>
<code>$this</code><code>->strategyName = </code><code>$strategyName</code><code>;</code>
<code>}</code>
<code>$this</code><code>->strategy = AbstractActivityStrategy::getInstance(</code><code>$this</code><code>->strategyName); </code><code>//加載政策類</code>
<code>public</code> <code>function</code> <code>addLog() {</code>
<code>$data</code> <code>= </code><code>array</code><code>(</code><code>'id'</code><code>=></code><code>'uid'</code><code>,</code><code>'event'</code><code>=></code><code>'eventName'</code><code>); </code><code>// 添加到資料庫的資料</code>
<code>$this</code><code>->strategy->addLog(</code><code>$data</code><code>);</code>
<code>* 政策工廠政策類</code>
<code>abstract</code> <code>class</code> <code>AbstractActivityStrategy</code>
<code>{</code>
<code>abstract</code> <code>public</code> <code>function</code> <code>addLog(</code><code>$data</code><code>);</code>
<code>public</code> <code>static</code> <code>function</code> <code>getInstance(</code><code>$strategyName</code><code>)</code>
<code>return</code> <code>new</code> <code>$strategyName</code><code>;</code>
<code>* 政策具體類</code>
<code>class</code> <code>DEFAULTActivityStrategy </code><code>extends</code> <code>AbstractActivityStrategy {</code>
<code>public</code> <code>function</code> <code>addLog(</code><code>$data</code><code>) {</code>
<code>$activityLog</code> <code>= </code><code>new</code> <code>ActivityLog();</code>
<code>$activityLog</code><code>->save(</code><code>$data</code><code>);</code>
<code>$activityLogAmount</code> <code>= </code><code>new</code> <code>ActivityLogAmount(); </code><code>//計數類</code>
<code>$activityLogAmount</code><code>->countValue += 1;</code>
<code>$activityLogAmount</code><code>->save();</code>
<code>* 活動日志具體類</code>
<code>class</code> <code>ActivityLog {</code>
<code>public</code> <code>function</code> <code>save(</code><code>$data</code><code>)</code>
<code>echo</code> <code>"save log .<br>"</code><code>;</code>
<code>* 活動計數具體類</code>
<code>class</code> <code>ActivityLogAmount {</code>
<code>public</code> <code>$countValue</code><code>; </code><code>//邀請記錄數</code>
<code>public</code> <code>function</code> <code>__construct()</code>
<code>$this</code><code>->countValue = 0;</code>
<code>public</code> <code>function</code> <code>save()</code>
<code>echo</code> <code>" log inc 1"</code><code>;</code>
<code>$activity</code> <code>= </code><code>new</code> <code>Activity(null);</code>
<code>$activity</code><code>->addLog();</code>
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1286700,如需轉載請自行聯系原作者