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

  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/suojian/p/14004727.html
Copyright © 2011-2022 走看看