php-設計模式之策略模式

//創建訂單之後的一系列操作統一 接口
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();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章