设计模式——策略模式

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议 DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v... 阅读详情

STRATEGY策略模式

 

1、 意图

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

2、 适用性

  • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来匹配一个类的方法。
  • 需要使用一个算法的不同变体。
  • 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
  • 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入到它们各自的Strategy类中以代替这些条件语句。

3、 结构


4、 参与者

 Strategy(策略):定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。

ConcreteStrategy(具体策略):以Strategy接口实现某具体算法。

Context(上下文):用一个ConcreteStrategy对象来匹配;维护一个对Strategy对象的引用;可定义一个接口来让Strategy访问它的数据。

5、 协作

  •  Strategy和Context相互作用以实现选定的算法。当算法被调用时,Context可以将该算法所需要的所有数据都传递给该Strategy。或者,Context可以将自身作为一个参数传递给Strategy操作。这就让Strategy在需要时可以回调Context。
  •  Context将它的客户的请求转发给它的Strategy。客户通常创建并传递一个ConcreteStrategy对象给该Context;这样,客户仅与Context交互。通常有一系列的ConcreteStrategy类可供客户从中选择。

6、 效果

1)  Strategy类层次为Context定义了一系列的可供重用的算法或行为。

2)  将算法封装在独立的Strategy类中使得你可以独立于其Context改变它,使它易于切换、易于理解、易于扩展。

3)  Strategy模式提供了用条件语句选择所需的行为以外的另一种选择。

4)  Strategy模式可以提供相同行为的不同实现。客户可以根据不同时间/空间权衡取舍要求从不同策略中进行选择。

5)  客户必须了解不同的策略。这个是策略模式潜在的缺点。

6)  增加了对象的数目。

7)  Strategy和Context之间的通信开销可能过大。

7、 示例

 Strategy

package com.examples.pattern.strategy;

/**
 * 策略,定义算法接口
 */
public interface Strategy {

	/**
	 * 某个算法的接口,可以有传入参数,也可以有返回值
	 */
	public void algorithmInterface();

}
ConcreteStrategy
package com.examples.pattern.strategy;

public class ConcreteStrategyA implements Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyA 的具体方法");
	}

}
package com.examples.pattern.strategy;

public class ConcreteStrategyB implements Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyB 的具体方法");
	}

}
package com.examples.pattern.strategy;

public class ConcreteStrategyC implements Strategy {

	@Override
	public void algorithmInterface() {
		System.out.println("ConcreteStrategyC 的具体方法");
	}

}
Context
package com.examples.pattern.strategy;

/**
 * 上下文对象,通常会持有一个具体的策略对象
 */
public class Context {

	/**
	 * 持有一个具体的策略对象
	 */
	private Strategy strategy;

	/**
	 * 构造方法,传入一个具体的策略对象
	 * 
	 * @param strategy
	 *            具体的策略对象
	 */
	public Context(Strategy strategy) {
		this.strategy = strategy;
	}

	/**
	 * 上下文对客户端提供的操作接口,可以有参数和返回值
	 */
	public void contextInterface() {
		// 通常会转调具体的策略对象进行算法运算
		strategy.algorithmInterface();
	}

}
Client
package com.examples.pattern.strategy;

public class Client {

	public static void main(String[] args) {
		Context context;

		Strategy strategy_A = new ConcreteStrategyA();
		context = new Context(strategy_A);
		context.contextInterface();

		Strategy strategy_B = new ConcreteStrategyB();
		context = new Context(strategy_B);
		context.contextInterface();

		Strategy strategy_C = new ConcreteStrategyC();
		context = new Context(strategy_C);
		context.contextInterface();
	}
}







扰动观察法MPPT控制器simulink仿真 最大功率点跟踪(MPPT)控制器对于光伏(PV)系统至关重要,因为它可以确保系统在所有操作条件下都能从光伏阵列中提取最大功率。扰动观察法(P&O)是一种广泛使用的MPPT算法,因为它简单且易于实现。本文介绍了P&O MPPT控制器的Simulink仿真,并分析了其性能。 阅读详情

相关推荐

YOLOv8+ByteTrack实战:5分钟搞定多目标跟踪(附鱼群检测调参秘籍)

本文详细介绍了如何利用YOLOv8和ByteTrack快速实现多目标跟踪,特别针对鱼群检测等复杂场景提供参数调优秘籍。通过环境配置、核心机制解析和专项调优技巧,开发者可在5分钟内搭建高效跟踪系统,适用于水产养殖、交通监控等实际应用。文章还包含工程落地方案和性能优化建议,帮助实现精准的鱼群计数与行为分析。

e1f2g的博客 1019

Strategy(策略)模式

  算法是定义好的过程,它能够根据一组输入产生一个输出.而策略是一个计划,它也涉及如何从一组输入获得一组输出.在通常情况下,与算法相比,策略是能够提供更大范围的可选方案.因而,策略通常代表一组或者一簇可以相互替换的方案.    当计算机程序存在多种策略时,程序代码会比较复杂.当有多个策略可用时,与策略相关的程序逻辑必须选择其中一个策略来执行,这时策略选择的程序代码可能变得很复杂,同时策略使用的逻...

何新宇的技术博客 1131

通过薄膜太阳能电池中的热激电流量化陷阱状态

发光(led)和光伏(PV)器件的性能取决于光活性半导体材料的质量。由于材料杂质或在制造过程中在半导体材料中无意地引入缺陷,导致偏离最佳性能。这些缺陷被称为阱态,或简称“阱”,它是半导体带隙内的高能态。一般来说,陷阱的发生可能是由于材料杂质(在散装)或在不同材料层之间的界面。在有机半导体中,由于天然物质的无序性,阱态经常出现。在无机和杂化半导体(例如:杂化钙钛矿、硅……)中,晶界的存在是圈闭态的已知来源。由于陷阱产生的原因多种多样,它们对装置的影响也是多种多样的。由于载流子的多次捕获和释放事件,特别是浅阱的

FluximAG的博客 2849

操作型模式之Strategy(策略)模式

1.如果你期望封装一个操作,使其实现可以互相替换,可使用Strategy(策略)模式 2.举例//策略抽象类 public abstract class Strategy { abstract void doIt(); }//策略A类 public class StrategyA extends Strategy{ @Override void doIt() {

lin 469

PLC模拟量输入电路设计:±10V与±20mA信号调理全解析

在工业自动化和数据采集系统中,模拟量输入是连接物理世界与数字控制的核心桥梁。无论是变送器输出的4-20mA电流环,还是伺服驱动与信号发生器提供的±10V电压信号,PLC和采集模块都需要在复杂现场环境下稳定、精准地完成信号采集。理解信号体制的原理——电流环抗长线干扰、电压环响应快——是设计模拟输入前端的基础。通过精密电阻网络实现分压与采样,利用运放完成双极性到单极性的电平搬移,配合TVS与滤波电路保障可靠性,并经过ADC量化与校准流程,最终构建出兼顾精度、成本和工业级鲁棒性的完整信号链路。本文面向硬件工程师与

weixin_29163797的博客 297

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复)

本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。

1a2s3d4f5g的博客 669

设计模式:Strategy(策略)模式

Strategy模式:策略模式。 模式概述: 定义一系列的算法,把他们一个个封装起来,并且使它们可以相互替换,Strategy模式使算法可以独立于使用它的客户而改变。在软件开发过程中,会遇到实现某一个功能有多种算法或者策略。我们可以根据不同的环境来选择不同的算法或者策略。如果我们统一的将这些算法的实现集成在同一个方法(函数中),可能需要用到较多的if...else...。或者我们将其集

lishuzhai的专栏 804

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 284

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

<br />策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响 到环境和客户端。 <br /> <br />(1)建立一个抽象类RepTempRule 定义一些公用变量和方法,示例代码如下:<br />public abstract class RepTempRule{<

engchina的专栏 4753

手把手教你安装 Vivado2022.2(附安装包)

Vivado 2022.2版本与之前的版本相比,具有以下几个显著的优势:电源设计管理器(PDM):Vivado 2022.2引入了全新的电源设计管理器(PDM),这是一个下一代功耗评估平台,为Versal® 和 Kria™ SOM提供了准确一致的功耗估计能力。PDM是Versal产品家族的首选功耗评估工具,为Versal ACAP硬IP块提供增强向导,简化从XPE向PDM的迁移,帮助用户获得准确的功耗评估。

dpwkj的博客 2万+

DeepSeek赋能公文写作指南(一)

DeepSeek 的出现,为公文写作领域带来了新的曙光。作为先进的人工智能技术,DeepSeek 以其强大的语言理解与生成能力,能为公文写作提供全方位的支持。它可以快速梳理思路,提供丰富的素材参考,辅助优化语言表达,甚至能根据不同的公文类型和场景,生成极具价值的内容框架。《DeepSeek 赋能公文写作指南》正是基于此背景应运而生。本书旨在帮助公文写作者深入了解并充分利用 DeepSeek 这一强大工具,将其融入到公文写作的各个流程中。

通俗易懂学IT 5483

策略模式在需求重构中的实际应用

策略模式定义:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化。Definea family of algorithms,encapsulate each one, andmake them interchangeable. Strategy lets the algorithmvary independently from clients that

u013059263的博客 452

dify制作的工作流如何通过API调用

本文介绍了如何通过Python程序调用Dify工作流API实现数据处理功能。文章详细展示了workflow和chatflow的调用方法,包括参数设置和结果输出,并提供了一个完整的API调用工具代码示例。该工具可实现文本处理、成果查重、关键词生成等功能,支持通过Python脚本或Postman进行调用。核心代码包含API请求函数和批量处理函数,通过HTTP请求与Dify服务端交互,实现自动化数据处理流程。

hhue2007的专栏 933

设计模式之策略模式(Strategy Design Pattern)

模板模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.翻译成中文就是:定义一系列算法(策略),封装每一个算法(策略),并使它们可以互换。使算法(策略)可以独立于使用它的客

xjj1314的专栏 428

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

23种设计模式之策略模式(Strategy Pattern)

本篇文章将23种设计模式中的策略模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

设计模式-策略模式-Strategy Pattern

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式的优点包括算法的封装和切换的灵活性,以及算法可独立于使用它的客户端变化。:如果算法的实现非常复杂,或者算法可能会随着时间而变化,策略模式可以帮助管理这种复杂性,使得算法的变化不会影响到使用算法的代码。:在需要根据不同条件动态切换算法的场景中,策略模式可以提供灵活的算法切换机制,例如,根据输入数据的特性选择不同的算法。

wesigj的博客 1456

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

设计模式-策略模式(Strategy Pattern)

设计模式-策略模式(Strategy Pattern)

weixin_45226668的博客 1506

C++设计模式——策略模式(Strategy Pattern)

C++设计模式——策略模式(Strategy Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——策略模式(Strategy Pattern)目录定义实现示例传统的策略模式实现使用函数指针实现策略模式工厂模式和策略模式对比总结参考资料 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式是指定

leonardohaig的博客 4770

设计模式:策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这样,算法的变化不会影响到使用算法的客户。

TechNomad的博客 1261

设计模式之策略模式(DesignPattern of Strategy)

C++版设计模式之策略模式

一路Coding 593

23种设计模式-19策略模式(Strategy Pattern)

策略模式是在开发中最常见的设计模式之一,本文介绍了策略的基本原理及使用场景,以及基于 java 代码的普通实现和基于Spring 的实现案例。

不开心就吃辣 1871

设计模式之策略模式(Strategy Pattern)

设计模式中有六大原则和二十三设计模式。 其中六大原则分别为:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 二十三设计模式:单例模式、Builder 模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模版方法模式、访问者模式、中介模式、代理模式、组合模式、适配器模式、装饰模式、享元模式、外观模式、桥接模式。

Mr_Four 608

设计模式教程:策略模式(Strategy Pattern)

定义一系列算法,将每个算法封装起来,并让它们可以互换,使得算法的变化独立于使用算法的客户。

遇见伯灵说的博客 978

Java设计模式--策略模式【Strategy Pattern】

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封

CoderLover 541

【设计模式】策略模式(Strategy Pattern)详解

策略模式(Strategy Pattern)是一种行为型设计模式,

qq_59344127的博客 1839

每天一个设计模式之策略模式(Strategy Pattern)

策略模式的适用场景是,当一个系统中只有算法策略变化,而其他都不变,这时候应当将算法隔离开,策略模式就是解决这类问题的模式。

Dive Deep into The Knowledge 469
上一篇: ORA-28547的解决
下一篇: 设计模式——状态模式
HingKwan
博客等级 码龄17年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值