策略模式

策略模式是一种行为设计模式 它能让你定义一系列算法 并将每种算法分别放入独立的类中,将行为转换为对象,以使算法的对象能够相互替换

实现方式

1、从上下文类中找出修改频率较高的算法 (也可能是用于在运行时选择某个算法变体的复杂条件运算符

2、声明该算法所有变体的通用策略接口

3、将算法逐一抽取到各自的类中 它们都必须实现策略接口

4、在上下文类中添加一个成员变量用于保存对于策略对象的引用 然后提供设置器以修改该成员变量 上下文仅可通过策略接口同策略对象进行交互 如有需要还可定义一个接口来让策略访问其数据

5、客户端必须将上下文类与相应策略进行关联 使上下文可以预期的方式完成其主要工作

代码示例

<?php

//定义算法及抽象实现
interface strategy
{
    function algorithmInterface();
}

class concreteStrategyA implements strategy
{
    function algorithmInterface()
    {
        echo '算法A';
    }
}

class concreteStrategyB implements strategy
{
    function algorithmInterface()
    {
        echo '算法B';
    }
}

//定义上下文执行环境
class context
{
    //成员变量,用来存储对策略的引用
    private $strategy;

    function __construct(strategy $s)
    {
        $this->strategy = $s;
    }

    function contextInterface()
    {
        $this->strategy->algorithmInterface();
    }
}

//客户端调用不同算法(客户端自行选择合适的策略)
$strategyA = new concreteStrategyA();
$context = new context($strategyA);
$context->contextInterface();   //算法A

$strategyB = new concreteStrategyB();
$context = new context($strategyB);
$context->contextInterface();   //算法B

适用场景

- 随时切换不同算法逻辑

- 业务逻辑与算法细节区分开来

 

好文章要分享:

https://zhuanlan.zhihu.com/p/105954533

posted @ 2020-11-19 11:55  所见即我  阅读(64)  评论(0编辑  收藏  举报