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
|
<?php /** * 策略模式 需求:想實現這樣一個功能: 開展一個網站邀請活動,然後參與者將推廣的網站地址連結發給好友,好友點選連結後在網站註冊成功,的邀請日誌記錄條數加1 這樣我們實現了 主體(Activity)、 策略(AbstractActivityStrategy -> DEFAULTActivityStrategy)、 行為(ActivityLog、ActivityLogAmount)的分離。 1:如果產品人員現在決定不要計數這個功能,那我們只需修改 策略 模組。 2:如果決定邀請到一個人數字加2 ,我們則只需修改 相應的行為類。 3:在如果這個產品人員實在變態,把邀請的整個邏輯都改了,那我們只需要增加相應的策略類,然後增加行為(如果存在就不必增加), 主體始終是不需要修改的。 */ /** * 活動主體類 */ class Activity {
private $strategy ; //用於儲存策略例項
public $strategyName = `DEFAULTActivityStrategy` ;
public function __construct( $strategyName ) {
if (! empty ( $strategyName )){
$this ->strategyName = $strategyName ;
} $this ->strategy = AbstractActivityStrategy::getInstance( $this ->strategyName); //載入策略類
} public function addLog() {
$data = array ( `id` => `uid` , `event` => `eventName` ); // 新增到資料庫的資料
$this ->strategy->addLog( $data );
} } /** * 策略工廠策略類 */ abstract class AbstractActivityStrategy
{ abstract public function addLog( $data );
public static function getInstance( $strategyName )
{ return new $strategyName ;
} } /** * 策略具體類 */ class DEFAULTActivityStrategy extends AbstractActivityStrategy {
public function addLog( $data ) {
$activityLog = new ActivityLog();
$activityLog ->save( $data );
$activityLogAmount = new ActivityLogAmount(); //計數類
$activityLogAmount ->countValue += 1;
$activityLogAmount ->save();
} } /** * 活動日誌具體類 */ class ActivityLog {
public function save( $data )
{ echo "save log .<br>" ;
} } /** * 活動計數具體類 */ class ActivityLogAmount {
public $countValue ; //邀請記錄數
public function __construct()
{ $this ->countValue = 0;
} public function save()
{ echo " log inc 1" ;
} } $activity = new Activity(null);
$activity ->addLog();
|
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1286700,如需轉載請自行聯絡原作者
相關文章
- PHP設計模式(3)—— 策略模式PHP設計模式
- PHP 設計模式之策略模式PHP設計模式
- 設計模式(策略模式)設計模式
- 設計模式-策略模式設計模式
- 設計模式——策略模式設計模式
- 小白設計模式:策略模式設計模式
- 設計模式之策略模式設計模式
- 設計模式🔫---策略模式設計模式
- js設計模式--策略模式JS設計模式
- 設計模式之【策略模式】設計模式
- 設計模式 #5 (策略模式、代理模式)設計模式
- PHP 模式大全 - 策略模式PHP模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- Javascript設計模式(四)策略模式JavaScript設計模式
- JS設計模式六:策略模式JS設計模式
- 《Head First 設計模式》:策略模式設計模式
- python設計模式之策略模式Python設計模式
- Java設計模式-策略模式分析Java設計模式
- JavaScript 設計模式之策略模式JavaScript設計模式
- 設計模式專題-策略模式設計模式
- 設計模式(一) 支付策略模式設計模式
- Javascript設計模式之策略模式JavaScript設計模式
- 極簡設計模式-策略模式設計模式
- 略懂設計模式之策略模式設計模式
- GoLang設計模式15 - 策略模式Golang設計模式
- JAVA設計模式之策略模式Java設計模式
- PHP設計模式-代理模式PHP設計模式
- 23種設計模式(二)---策略設計模式設計模式
- 設計模式第二講--策略模式設計模式
- 設計模式漫談之策略模式設計模式
- javascript設計模式 之 2 策略模式JavaScript設計模式
- Head First 設計模式(1)-----策略模式設計模式
- c/c++設計模式---策略模式C++設計模式
- Java設計模式之(十四)——策略模式Java設計模式
- 細品 javascript 設計模式(策略模式)JavaScript設計模式
- Java設計模式之策略模式示例Java設計模式
- php設計模式PHP設計模式
- PHP 設計模式PHP設計模式
- PHP設計模式-- 單列模式PHP設計模式