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();

 

你可能感兴趣的:(设计模式)