PHP开发PHP经验分享

编程中的设计模式之策略模式

2020-10-14  本文已影响0人  phpworkerman
定义

策略模式(Strategy Pattern)定义了算法家族,分别封装起来,让它们可以互相替换,此模式让算法的变化不会影响到使用算法的客户,属于行为型模式。

代码示例

商城中常用到商品促销的模块,促销有多种方式,本质上是商品金额计算的算法。多种算法集合在一起怎么使用,客户端不需要关心,这也是下边的代码里选择将策略选择的代码放在了Context里进行管理,尽量减少客户端对对象的引用。

<?php
abstract class Promotion
{
    abstract public function counter($money);
}

class Original extends Promotion
{
    public function counter($money)
    {
        return $money;
    }
}

class Discount extends Promotion
{
    private $rate;

    public function __construct($rate)
    {
        $this->rate = $rate;
    }

    public function counter($money)
    {
        return $money * $this->rate / 10;
    }
}

class Context
{
    public function usePromotion($promotion,$money,$rate = '')
    {
        switch($promotion){
            case 'original':
                $promotionModel = new Original();
                echo $promotionModel->counter($money);
                break;
            case 'discount':
                $promotionModel = new Discount($rate);
                echo $promotionModel->counter($money);
                break;
            default:
                $promotionModel = new Original();
                echo $promotionModel->counter($money);
        }
    }
}

class DemoPattern
{
    public function handle()
    {
        $context = new Context();
        $context->usePromotion('original',996);
        //打7折
        $context->usePromotion('discount',996,7);
    }
}
$demoPattern = new DemoPattern();
$demoPattern->handle();
总结

策略模式是用来封装算法的,减少算法使用者和算法之间的耦合,也减少客户端的各种 If...else 判定。

上一篇下一篇

猜你喜欢

热点阅读