php设计模式-策略模式

php设计模式-策略模式
1.概念:

      策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

 

2.组成部分:
     a.抽象策略角色: 策略类,通常由一个接口或者抽象类实现
     b.具体策略角色:包装了相关的算法和行为。
     c.环境角色:持有一个策略类的引用,最终给客户端调用。
 3.解决的问题:
     a.电商中运费的处理 网站邀请注册 等处理
 4.结构图



php设计模式-策略模式
 
 1 class Activity  {
 2         private $strategy; //用于保存策略实例
 3         public  $strategyName = 'DEFAULTActivityStrategy';
 4         public function __construct($strategyName) {
 5             if(!empty($strategyName)){
 6                 $this->strategyName = $strategyName;
 7             }
 8             $this->strategy = AbstractActivityStrategy::getInstance($this->strategyName); //加载策略类
 9         }
10         public function addLog() {
11             $data = array('id'=>'uid','event'=>'eventName');  // 添加到数据库的数据
12             $this->strategy->addLog($data);
13         }
14     }
15    
16      abstract class AbstractActivityStrategy
17     {
18         abstract public function addLog($data);
19         public static function getInstance($strategyName)
20         {
21             return new $strategyName;
22         }
23     }
24      
25     /\**
26      * 策略具体类
27      */
28     class DEFAULTActivityStrategy extends AbstractActivityStrategy {
29         public function addLog($data) {
30             $activityLog = new ActivityLog();
31             $activityLog->save($data);
32             $activityLogAmount = new ActivityLogAmount(); //计数类
33             $activityLogAmount->countValue += 1;
34             $activityLogAmount->save();
35         }
36     }
37     /\**
38      * 活动日志具体类
39      */
40     class ActivityLog  {
41         
42         public function save($data)
43         {
44             echo "数据保存到数据库
45 ";
46         }
47     }
48     /\**
49      * 活动计数具体类
50      */
51     class ActivityLogAmount {
52         public $countValue; //邀请记录数
53         public function __construct()
54         {
55             $this->countValue = 0;
56         }
57         public function save()
58         {
59             echo "推荐次数为".$this->countValue;
60         }
61     }
62      
63      
64     $activity = new Activity(null);
65     $activity->addLog();

 

posted @ 2013-12-20 14:33  Otgs  阅读(217)  评论(0编辑  收藏  举报