设计模式之策略模式--配合工厂模式灵活替换不同算法实现

设计模式之策略模式–配合工厂模式灵活替换不同算法实现

策略模式是一种对可替换的算法或者业务逻辑进行封装,灵活替换的模式。

定义了算法家族并分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。

为什么要使用策略模式

策略模式是比较常用的模式了,很多情况下都会需要根据场景来替换不同的具体实现。

比如打折算法,针对不同级别的用户进行不同的打折。

比如优惠券算法,针对不同类型的优惠券使用不同的算法。

比如支付算法,对接微信,支付宝等不同的支付渠道。

只要是同一种类型,但是有多种实现。就可以使用策略模式,策略模式一般和工厂模式搭配使用,通过工厂创建对应的策略对象供客户端使用。

php实现策略模式

首先定义一个接口或者父类,所有的策略继承父类.


class StrategySuper {
    function getResult($money) {
    }
}

接下来实现不同的具体策略。

/**
 * 策略A
 * 满减活动
 */
class StrategyA extends StrategySuper {

    function __construct($man, $jian)
    {
        $this->man = $man;
        $this->jian = $jian;
    }

    function getResult($money) {
        if ($money >= $this->man) {
            return $money -= $this->jian;
        }
        return $money;
    }
}

/**
 * 策略B
 * 打折活动
 */
class StrategyB extends StrategySuper {

    function __construct($zhe)
    {
        $this->zhe = $zhe;
    }
    function getResult($money) {
        return $money * $this->zhe;
    }
}

这时候客户端可以根据需要使用不同的策略,也可以创建一个策略工厂,通过工厂来创建策略。

/**
 * 根据策略规则创建策略类
 *
 */
class StrategyContext{


    private $strategy;

    function __construct(string $type)
    {
        switch($type) {
            case 'manjian':
                $this->strategy = new StrategyA(100,10);
                break;
            case 'dazhe':
                $this->strategy = new StrategyB(0.5);
                break;
        }

    }
    function getMoney($money) {
        return $this->strategy->getResult($money);
    }
}

代码放在了我的github上面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值