首页 > 其他分享 >设计模式-策略模式

设计模式-策略模式

时间:2024-05-29 19:01:30浏览次数:23  
标签:封装 策略 void 模式 strategy 算法 设计模式

在软件开发中,我们经常会遇到在实现一个功能的时候会有多种不同的途径,每一个途径都对应一种算法,此时我们可以使用策略模式来实现灵活地选择解决途径。

策略模式的定义

在策略模式中,定义了一些独立的类来封装不同的算法,每个类封装一种具体的算法。每个封装算法的类都可以称为一种策略。

策略模式的主要目的时将算法的定义和使用进行分开,也就是将算法的行为和环境分开。将算法的定义专门放在专门的策略类中,每个策略类封装了一种实现算法。

策略模式:定义一系列算法类,将每一个算法类封装起来,并让它们可以相互替换。

其UML类图如下所示

 从UML类图中不难看出策略模式主要包含了以下三个角色

(1)Context(环境类):环境类时使用算法的角色,它在解决某个问题时可以采用多种策略。

(2)Strategy(抽象策略类):它为所支持的算法声明了抽象方法,是所有策略类的父类。

(3)ConcreteStrategy(具体策略类):它实现了在抽象策略类中声明的算法。

其典型代码如下:

环境类

class Context
   private AbstractStrategy strategy; //维持一个对抽象策略类的引用

   public void setStrategy(AbstractStrategy strategy){
          this.strategy =  strategy;
  }
 //调用策略类中的算法
 public void algorithm(){
   strategy.algorithm();
  }
}

抽象策略类

abstract class AbstrategyStrategy{
   public abstract void algorithm();
}

具体策略类

class ConcreteStartegyA extends AbstractStrategy{
     //算法的具体实现
     public void algorithm()
     //算法A 
    }
}

策略模式总结

策略模式对应于解决某一问题的一个算法族。

主要优点

(1)策略模式提供了对开闭原则的完美支持,用户可以在不修改原有代码的基础上选择算法和行为,也可以灵活的增加新的算法和行为

  (2) 使用策略模式可以避免多重条件选择语句

(3)策略模式提供了一种算法的服用机制

(4)策略模式提供了一种可以替换继承关系的办法

主要缺点

  (1)客户端必须知道所有的策略类,并自行决定使用哪个策略类。

  (2)会造成系统产生很多的策略类,任何微小的变化都会导致系统中新增一个策略类。

(3)无法同时在客户端使用多个策略类。不支持使用一个策略类完成一部分功能后再使用另一个策略类来完成剩余功能的情况。

适用场景

  在以下场景可以考虑适用策略类

 (1)一个系统需要动态地在几种算法中选择一种。

   (2) 消除多重条件选择语句

 (3)不希望客户端知道复杂的,与算法相关的数据结构。

标签:封装,策略,void,模式,strategy,算法,设计模式
From: https://blog.csdn.net/qq_41332630/article/details/139282290

相关文章

  • 博客增长与数据分析:不可不知的 6 大策略
    CSDN的朋友你们好,我是何未来,一个热爱编程和写作的计算机本科生,今天给大家带来专栏【程序员博主教程(完全指南)】的第11篇文章“分析和追踪博客表现”。本篇文章为你揭示了如何通过数据洞察来优化你的技术博客,从基础指标到高级分析技巧,从流量来源到用户行为,每一步都是提升......
  • 前端学习-Dart官方文档学习-003-模式匹配
    官方文档链接简介匹配和解构//匹配consta='a';constb='b';switch(obj){//Listpattern[a,b]matchesobjfirstifobjisalistwithtwofields,//thenifitsfieldsmatchtheconstantsubpatterns'a'and'b'.c......
  • 智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式
    随着现代科技的不断发展,智能化、自动化的养殖方式逐渐受到广大养殖户的青睐。特别是在山林生态养鸡领域,智能化监控方案的引入不仅提高了养殖效率,更有助于保障鸡只的健康与安全。视频监控系统EasyCVR视频汇聚/安防监控视频管理平台在山林生态养鸡场景中也发挥了重要的作用。一、方......
  • MVVM模式的优点以及与MVC模式的区别?
    1.MVVM模式的优点:1、低耦合:视图(View)可以独⽴于Model变化和修改,⼀个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。2、可重⽤性:你可以把⼀些视图逻辑放在⼀个ViewModel⾥⾯,让很多......
  • 逆向海淘商业模式案例分析 :hagobuy淘宝代购集运系统丨淘宝代购集运系统搭建
    淘宝代购集运系统是一个电子商务平台,它允许消费者购买来自不同在线零售商(如淘宝、天猫、京东等)的商品,并将这些商品统一运送到消费者的地址。下面将探讨淘宝代购集运系统的工作机制和优势:多平台API接口的集成实时数据同步:通过API接口,系统能够实时获取并同步电商平台上商品......
  • 量化交易:如何在QMT中运行Python策略并在VSCode中高效调试?
    哈喽,大家好,我是木头左!为何选择QMT和VSCode进行量化策略开发?在量化交易的世界里,选择正确的工具与拥有优秀的策略同等重要。调用用VisualStudioCode(简称VSCode)或pycharm,方式都差不多。结合QMT的数据处理能力和VSCode的便捷调试功能,可以极大地提高量化策略的开发效率和质......
  • c/c+设计模式--桥接模式
    桥接模式是软件设计模式的一种,它用于将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过创建桥接接口,将抽象和实现部分分离,从而使它们可以独立地变化,而不会相互影响。在桥接模式中,有两个重要的概念:抽象和实现。抽象定义了客户端的接口,而实现则提供了具体的实现。通过桥......
  • 【旧文更新】【优秀课设】基于Linux粤嵌GEC6818开发板的电子乐队程序设计(四种模式:和弦
    【旧文更新】【优秀课设】基于Linux粤嵌GEC6818开发板的电子乐队程序设计(四种模式:和弦模式、键盘模式、鼓点模式、编曲模式)文章目录关于旧文新发模式介绍展示摘要代码附录:关于旧文新发关于旧文新发为何要进行旧文新发?因为我在2023年博客之星评选中发现有的人转载......
  • 干货收藏!Calico的BGP RouteReflector策略实践
    本文分享自华为云社区《CalicoBGPRouteReflector策略实践》,作者:可以交个朋友。一背景容器网络组件Calico支持多种后端模式,有Overlay的IPIP、Vxlan模式,也有Underlay纯路由的BGP模式。相比于Overlay网络模型,Underlay网络具有更高的数据面转发性能。同时在纯路由模式下,也有两种......
  • 机器学习策略篇:详解可避免偏差(Avoidable bias)
    可避免偏差如果希望学习算法能在训练集上表现良好,但有时实际上并不想做得太好。得知道人类水平的表现是怎样的,可以确切告诉算法在训练集上的表现到底应该有多好,或者有多不好,让我说明是什么意思吧。经常使用猫分类器来做例子,比如人类具有近乎完美的准确度,所以人类水平的错误是1%......