天天看點

php設計模式--政策模式

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>&lt;?php</code>

<code>/**</code>

<code>* 政策模式</code>

<code>需求:想實作這樣一個功能:</code>

<code>開展一個網站邀請活動,然後參與者将推廣的網站位址連結發給好友,好友點選連結後在網站注冊成功,的邀請日志記錄條數加1</code>

<code>這樣我們實作了</code>

<code>主體(Activity)、</code>

<code>政策(AbstractActivityStrategy -&gt; 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>-&gt;strategyName = </code><code>$strategyName</code><code>;</code>

<code>}</code>

<code>$this</code><code>-&gt;strategy = AbstractActivityStrategy::getInstance(</code><code>$this</code><code>-&gt;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>=&gt;</code><code>'uid'</code><code>,</code><code>'event'</code><code>=&gt;</code><code>'eventName'</code><code>);  </code><code>// 添加到資料庫的資料</code>

<code>$this</code><code>-&gt;strategy-&gt;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>-&gt;save(</code><code>$data</code><code>);</code>

<code>$activityLogAmount</code> <code>= </code><code>new</code> <code>ActivityLogAmount(); </code><code>//計數類</code>

<code>$activityLogAmount</code><code>-&gt;countValue += 1;</code>

<code>$activityLogAmount</code><code>-&gt;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 .&lt;br&gt;"</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>-&gt;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>-&gt;addLog();</code>

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1286700,如需轉載請自行聯系原作者