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 .
"; } } /** * 活动计数具体类 */ class ActivityLogAmount { public $countValue; //邀请记录数 public function __construct() { $this->countValue = 0; } public function save() { echo " log inc 1"; } } $activity = new Activity(null); $activity->addLog();