//创建订单之后的一系列操作统一 接口 interface Behavior{ //订单创建之后的操作 public function done(Body $body); } class Check implements Behavior{ public function done(Body $body) { echo "校验订单信息".PHP_EOL; // TODO: Implement done() method. } } class Log implements Behavior{ public function done(Body $body) { echo "订单创建完成,写入日志".PHP_EOL; // TODO: Implement done() method. } } class Coupon implements Behavior{ public function done(Body $body) { echo "订单创建完成,使用优惠券".PHP_EOL; // TODO: Implement done() method. } } class Point implements Behavior{ public function done(Body $body) { echo "订单创建完成,扣除积分".PHP_EOL; // TODO: Implement done() method. } } class Body { public $orderInfo = []; public $orderCouponInfo = []; public $orderLogInfo = []; public $orderPointInfo = []; public $behaviorList = []; //初始化数据 function __construct($infos = []){ $this->orderInfo = $infos; $this->orderCouponInfo = $infos; $this->orderLogInfo = $infos; $this->orderPointInfo = $infos; } //注册相关行为 public function addBehavior(Closure ...$closures){ $this->behaviorList = array_merge($this->behaviorList,$closures); return $this; } //创建订单 public function createOrder(){ foreach ($this->behaviorList as $behavior){ $behavior()->done($this); } } } (new Body(['orderId'=>1]))->addBehavior(function(){ return new Check(); }, function(){ return new Log(); }, function(){ return new Coupon(); }, function (){ return new Point(); } )->createOrder();
php-设计模式之策略模式
最新推荐文章于 2021-10-13 14:43:03 发布