zoukankan      html  css  js  c++  java
  • 策略模式

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

    实现方式

    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

  • 相关阅读:
    MicXP程序爱好者
    cnblogs上的mysql学习心得
    iwebship 购物系统 PHP lamp环境
    可以购买的网址
    模板网址
    学习ecshop 教程网址
    ecshop数据库操作函数
    yzoj1568: 数字组合 题解
    yzoj1891 最优配对问题 题解
    yzoj1985 最长公共单调上升子序列 题解
  • 原文地址:https://www.cnblogs.com/suojian/p/14004727.html
Copyright © 2011-2022 走看看