当前位置: 首页 > news >正文

南通网站排名优化价格网页搜索引擎

南通网站排名优化价格,网页搜索引擎,莱芜新站优化,2015做导航网站有哪些功能吗行为设计模式之Strategy(策略) 摘要: 策略模式是一种行为设计模式,它定义一系列算法并封装为独立对象,使它们可以相互替换。该模式让算法独立于使用它的客户端而变化,适用于需要动态切换算法、避免大量条…

行为设计模式之Strategy(策略)

摘要:

策略模式是一种行为设计模式,它定义一系列算法并封装为独立对象,使它们可以相互替换。该模式让算法独立于使用它的客户端而变化,适用于需要动态切换算法、避免大量条件语句、实现算法与使用代码分离的场景。文章通过Java代码示例展示了加减乘三种算法的策略实现,并列举了电商定价、游戏AI、金融投资等典型应用领域。策略模式的核心优势在于提高代码扩展性和维护性,符合开闭原则。

1)意图

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。

2)结构

在这里插入图片描述

3)适用性

Strategy 模式适用于:

  • 许多相关的类仅仅是行为有异。
  • 需要使用一个算法的不同变体。
  • 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与其算法相关的数据结构。
  • 一个类定义了许多种行为
/*** @author psd 行为设计模式之策略设计模式*/
public class StrategyPattern {public static void main(String[] args) {OperationContext context = new OperationContext(new AddStrategy());context.executeStrategy(1, 2);context = new OperationContext(new SubStrategy());context.executeStrategy(1, 2);context = new OperationContext(new MultiplyStrategy());context.executeStrategy(1, 2);}
}/*** 操作上下文*/
class OperationContext {private Strategy strategy;public OperationContext(Strategy strategy) {this.strategy = strategy;}public void executeStrategy(int a, int b) {strategy.doOperation(a, b);}
}/*** 策略接口*/
interface Strategy {/*** 执行策略* * @param a*            参数a* @param b*            参数b* @return 结果*/public void doOperation(int a, int b);
}class AddStrategy implements Strategy {@Overridepublic void doOperation(int a, int b) {System.out.println("加法:" + (a + b));}
}class SubStrategy implements Strategy {@Overridepublic void doOperation(int a, int b) {System.out.println("减法:" + (a - b));}
}class MultiplyStrategy implements Strategy {@Overridepublic void doOperation(int a, int b) {System.out.println("乘法:" + (a * b));}
}

在这里插入图片描述

1、需要在运行时动态选择算法或行为:

当系统需要在多种算法中选择一种执行,且这个选择可能需要在程序运行时(例如根据用户输入、配置、环境条件)动态决定时。

例子:

排序算法: 一个排序工具类,可能根据数据量的大小、是否已部分有序等因素,在运行时选择使用快速排序、归并排序、插入排序等不同的算法。

导航系统: 导航应用允许用户选择最快路线、最短距离、避开收费、避开高速等不同的路线计算策略。

支付系统: 在结账时,用户可以选择不同的支付策略:支付宝、微信支付、信用卡、PayPal。系统根据用户的选择调用对应的支付处理逻辑。

数据压缩/加密: 根据需求选择不同的压缩算法(ZIP, GZIP, RAR)或加密算法(AES, DES, RSA)。

2、存在多种相似算法或行为,仅具体实现不同:

当完成同一项任务存在多种不同的方式(算法),这些方式在概念上做的是同一件事,但实现细节不同时。

例子:

文件解析: 需要解析不同格式的文件(CSV、JSON、XML),每种格式的解析逻辑不同,但最终目标都是将文件内容转换为内部数据结构。

渲染引擎: 一个图形渲染系统,可能需要支持渲染到不同的目标:屏幕、PDF文件、SVG矢量图。每种目标有不同的渲染实现,但渲染的基本流程(如绘制形状、文本)是相似的。

日志记录: 日志可以输出到不同的目的地:控制台、文件、数据库、网络服务。记录日志的核心行为(记录信息)是相同的,但输出的具体方式不同。

折扣计算: 电商系统中计算商品折扣有多种策略:无折扣、固定折扣、百分比折扣、满减、会员折扣等。它们都是计算最终价格,但计算规则各异。

3、需要避免使用大量的条件语句(if-else / switch-case)来选择算法:

当客户端代码中充斥着大量的条件分支来判断应该使用哪种算法时,代码会变得臃肿、难以阅读和维护。添加新的算法或修改现有算法逻辑都需要修改这些条件分支,违反开闭原则。

策略模式的价值: 它将每个算法封装在独立的策略类中。客户端代码不再直接判断和执行算法,而是持有一个策略接口的引用,并通过这个接口调用算法。算法的选择(即具体策略对象的创建和设置)可以集中管理(如使用工厂模式)或由更高层代码(如用户配置)决定,从而消除了客户端代码中的条件分支。

4、算法的实现细节需要与使用它的代码分离:

当算法的具体实现比较复杂、可能经常变化,或者你希望将算法的实现细节对客户端代码隐藏,以降低耦合度时。

策略模式的价值: 客户端代码只依赖于抽象的Strategy接口,完全不知道具体策略类的内部实现。这使得算法实现的修改、优化甚至替换都不会影响到使用算法的客户端代码。

5、需要方便地扩展新的算法:

当系统预期未来需要支持新的算法变体时。

策略模式的价值: 添加一个新的算法(策略)变得非常简单:只需要实现一个新的策略类,符合Strategy接口即可。无需修改现有的策略类或使用算法的上下文类(Context),完美符合开闭原则。

4)常见应用领域举例:

电商/零售系统:

定价策略(成本加成、竞争定价、促销定价)、折扣策略、运费计算策略(按重量、按体积、固定运费、免邮条件)、库存分配策略(FIFO, LIFO)。

游戏开发:

AI行为策略(不同的敌人有不同的攻击或移动策略)、伤害计算策略(物理伤害、魔法伤害、真实伤害)、资源收集策略。

金融系统:

投资组合管理策略(保守型、平衡型、激进型)、风险评估策略、交易执行策略(市价单、限价单、止损单)。

数据处理/分析系统:

数据清洗策略(处理缺失值、异常值)、特征选择策略、模型选择策略(不同机器学习算法)、数据导出格式策略(CSV, Excel, JSON)。

GUI框架/工具包:

布局管理器策略(FlowLayout, BorderLayout, GridLayout)、组件绘制策略(不同主题/Skin)、事件处理策略(不同平台可能有不同实现)。

工具类库:

Java中的Comparator接口是策略模式的经典应用。你可以为不同的排序需求实现不同的Comparator策略对象。ThreadPoolExecutor的拒绝策略(AbortPolicy, CallerRunsPolicy, DiscardPolicy, DiscardOldestPolicy)也是策略模式的应用。

网络通信:

选择不同的网络传输协议策略(TCP, UDP, HTTP)、数据序列化策略(JSON, Protobuf, XML)、负载均衡策略(轮询、随机、最少连接、响应时间)。

喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

http://www.dinnco.com/news/70700.html

相关文章:

  • 河北省做网站哪家公司好百度seo怎么关闭
  • 玩具外贸网站aso优化渠道
  • 宁波网站建设哪家好免费做网站的平台
  • 沈阳网站建设方法北京百度推广优化
  • 设计模板选项是用来论坛seo教程
  • dw怎么新建网站五种网络营销推广方法
  • 公司网站建设合同书营销的四种方式
  • 城市建设服务中心网站全国疫情最新情况公布
  • 微信里的网站怎么做360搜索引擎网址
  • 沧州市网站建设公司怎么推广平台
  • 网站设计是用ps做图吗国外引擎搜索
  • 辞职做网站什么叫口碑营销
  • 深圳网站备案网络广告推广公司
  • 邵东网站建设站长之家seo信息
  • wordpress文件上传下载seo推广效果怎么样
  • 广告设计公司宣传册上海企业seo
  • 三合一网站建设官网全网关键词云在哪里看
  • 携程: 2023年旅行搜索上涨超900%seo域名综合查询
  • 自己的服务器如何给网站备案哪有学电脑培训班
  • 某品牌休闲零食网站建设规划书外贸企业网站推广
  • 做网站 想做成宽屏的免费刷seo
  • 西安响应式网站开发seo赚钱方法大揭秘
  • 国企怎么做网站百度推广登录平台官网
  • 苏州做网站推广软文范文大全
  • 巫山网站开发推广渠道有哪些方式
  • 任丘哪里做网站搜索引擎营销的优势和劣势
  • 吉林市 网站建设网络推广专员
  • 上海最专业的网站设计制怎么在百度推广
  • 厦门做网站的公司网络技术推广服务
  • 做a的网站有哪些沧浪seo网站优化软件