//創建訂單之後的一系列操作統一 接口 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-設計模式之策略模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.