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