c#实现策略模式
下面是一个使用C#实现策略模式的示例代码:
using System;// 策略接口
public interface IStrategy
{void Execute();
}// 具体策略类A
public class ConcreteStrategyA : IStrategy
{public void Execute(){Console.WriteLine("具体策略A的执行逻辑");}
}// 具体策略类B
public class ConcreteStrategyB : IStrategy
{public void Execute(){Console.WriteLine("具体策略B的执行逻辑");}
}// 上下文类
public class Context
{private readonly IStrategy strategy;public Context(IStrategy strategy){this.strategy = strategy;}public void ExecuteStrategy(){strategy.Execute();}
}// 示例代码
class Program
{static void Main(string[] args){// 创建上下文对象,传入具体策略对象Context context = new Context(new ConcreteStrategyA());// 执行策略context.ExecuteStrategy();// 切换策略context = new Context(new ConcreteStrategyB());context.ExecuteStrategy();Console.ReadKey();}
}
在上述示例中,我们首先定义了一个策略接口IStrategy,它包含了一个Execute方法,用于执行具体的策略逻辑。然后我们创建了两个具体的策略类ConcreteStrategyA和ConcreteStrategyB,它们分别实现了策略接口中的Execute方法,提供了具体的策略执行逻辑。
接下来,我们创建了一个上下文类Context,它在构造函数中接收一个策略对象,并提供了一个ExecuteStrategy方法来执行策略。在ExecuteStrategy方法中,实际上是调用了传入的策略对象的Execute方法,从而执行具体的策略逻辑。
在示例代码中,我们创建了一个Context对象,并传入一个ConcreteStrategyA对象,然后调用ExecuteStrategy方法执行策略。接下来,我们切换策略,将ConcreteStrategyB对象传入Context对象,再次调用ExecuteStrategy方法执行新的策略。运行代码后,你将看到"具体策略A的执行逻辑"和"具体策略B的执行逻辑"这两个输出。
通过使用策略模式,我们可以在运行时动态地切换不同的策略,从而实现不同的行为。策略模式提供了一种灵活的设计方式,将算法的实现与使用分离,使得代码更易于扩展和维护。
相关文章:
c#实现策略模式
下面是一个使用C#实现策略模式的示例代码: using System;// 策略接口 public interface IStrategy {void Execute(); }// 具体策略类A public class ConcreteStrategyA : IStrategy {public void Execute(){Console.WriteLine("具体策略A的执行逻辑");} …...
家纺行业小程序商城搭建指南
家纺行业作为一个不可或缺的消费领域,近年来备受关注。随着互联网的发展,小程序商城成为家纺行业拓展市场的新利器。搭建一个家纺行业小程序商城并不是一件困难的事情,只需要按照以下几个步骤进行操作,就能轻松上手。 首先&#x…...
Python语法基础--条件选择
学习目标 使用比较运算符编写布尔表达式。使用random.randint(a,b)或者random.random()函数来生成随机数。编写布尔表达式(AdditionQuiz)。使用单向if语句实现选择控制。使用单向if语句编程。使用双向if-else语句实现选择控制。使用嵌套if和多向if-elif-else语句实现选择控制。…...
visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)
在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目,直接打开这个头文件源文件就会一起出来了! 真的管用,亲测有效。...
亚马逊feedback和review有什么区别
在亚马逊上,"Feedback"(反馈)和"Review"(评论)是两个不同的概念,它们在购物体验中起着不同的作用。 Feedback(反馈): 亚马逊的"Feedback"…...
新疆大学841软件工程考研
1.软件生产的发展经历了三个阶段,分别是____、程序系统时代和软件工程时代时代。 2.可行性研究从以下三个方面研究每种解决方法的可行性:经济可行性、社会可行性和_____。 3.HIPO图的H图用于描述软件的层次关系&…...
Vue: el-form 自定义校验规则
Vue 的 el-form 组件可以使用自定义校验规则进行表单验证。自定义校验规则可以通过传递一个函数来实现,该函数接受要校验的字段的值作为参数,并返回一个布尔值或一个 Promise 对象。 下面是一个示例,演示如何在 el-form 中使用自定义校验规则…...
8.14 ARM
1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签,相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签,相当于C语言中函数b stop 跳转到stop标签下的第一条…...
Flink笔记
下面是你提供的文字整理后的结果: 1. Flink是一个针对流数据和批数据的分布式处理引擎,同时支持原生流处理的开源框架。 - 延迟低(毫秒级),且能够保证消息传输不丢失不重复。 - 具有非常高的吞吐(每秒千万级)。 - 支持原生流处理。…...
深度学习在MRI运动校正中的应用综述
运动是MRI中的主要挑战之一。由于MR信号是在频率空间中获取的,因此除了其他MR成像伪影之外,成像对象的任何运动都会导致重建图像中产生伪影。深度学习被提出用于重建过程的几个阶段的运动校正。广泛的MR采集序列、感兴趣的解剖结构和病理学以及运动模式&…...
内存不足V4L2 申请DMC缓存报错问题
当内存不足时,V4L2可能存在申请DMA缓存报错,如下日志: 13:36:54:125 [15070.640862] rkcifhw fdfe0000.rkcif: swiotlb buffer is full (sz: 1843200 bytes) 13:36:54:125 [15070.640891] rkcifhw fdfe0000.rkcif: swiotlb: coherent allocation failed, size=1843200 13:3…...
论文笔记--Llama 2: Open Foundation and Fine-Tuned Chat Models
论文笔记--Llama 2: Open Foundation and Fine-Tuned Chat Models 1. 文章简介2. 文章概括3 文章重点技术3.1 预训练Pretraining3.1.1 预训练细节3.1.2 Llama2模型评估 3.2 微调Fine-tuning3.2.1 Supervised Fine-Tuning(FT)3.2.2 Reinforcement Learning with Human Feedback(…...
客达天下项目案例
本资料转载于传智播客https://www.itheima.com/ https://space.bilibili.com/3493265607232348 黑马程序员主办的全日制统招大学——大同互联网职业技术学院 预计2024年开始招生,敬请持续关注! B站视频入口:002_接口项目介绍_哔哩哔哩_bili…...
系统设计类题目汇总二
12 如何在实际的生产者端减少数据库的IO次数? 我自己想到的: 1 对于局部性很强的数据,启用mysql缓存机制,这样就不用磁盘IO 2 对于行数很多的表,可以分库分表,单表的数据量下来了,则查找索引要…...
MySQL和Redis如何保证数据一致性
MySQL与Redis都是常用的数据存储和缓存系统。为了提高应用程序的性能和可伸缩性,很多应用程序将MySQL和Redis一起使用,其中MySQL作为主要的持久存储,而Redis作为主要的缓存。在这种情况下,应用程序需要确保MySQL和Redis中的数据是…...
Go学习第九天
使用sqlite3 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"_ "github.com/mattn/go-sqlite3""log""time" )var schema CREATE TABLE perso…...
kafka集成篇
kafka的Java客户端 生产者 1.引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.6.3</version></dependency>2.生产者发送消息的基本实现 /*** 消息的发送⽅*/ …...
go-安装部署
一、安装go 详细安装方式可以查看官网 # 下载 wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz # 解压缩 tar -xzf go1.21.0.linux-amd64.tar.gz # 迁移目录 mv go /usr/local # 配置环境变量 export PATH$PATH:/usr/local/go/bin # 检查go的版本 go version有…...
vue项目的实用性总结
1、mockjs 基本使用 ★ 安装:npm i mockjs。 在src/mock/index.js内容如下: import Mock from mockjs //制订拦截规则 Mock.mock(http://www.0313.com,get,你好啊)记得在main.js中引入一下,让其参与整个项目的运行。 只要发出去的是get类型…...
IOC容器
DI(依赖注入):DI(Dependency Injection)是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器,使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入…...
IDEA使用maven打包Java项目,跳过test的3种方法
文章目录第一种:命令行第二种:pom.xml设置第三种:IDEA工具操作第一种:命令行 命令行的方式,在哪输入命令都行。 mvn install -Dmaven.test.skiptrue第二种:pom.xml设置 修改pom.xml文件 <build>&…...
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置)
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置) 嵌入式开发新手在初次接触GD32F103时,往往会被各种编译报错搞得焦头烂额。特别是从STM32转过来的开发者,本以为操作流程相似,结…...
旧设备优化与系统兼容性提升:OpenCore Legacy Patcher全流程指南
旧设备优化与系统兼容性提升:OpenCore Legacy Patcher全流程指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款专…...
如何一站式解决漫画格式转换难题:CBconvert完整指南
如何一站式解决漫画格式转换难题:CBconvert完整指南 【免费下载链接】cbconvert CBconvert is a Comic Book converter 项目地址: https://gitcode.com/gh_mirrors/cb/cbconvert 还在为不同设备上的漫画格式兼容性问题而烦恼吗?CBconvert作为一款…...
【Java Web学习 | 第九篇】JavaScript(3) 数组+函数
【Java Web学习 | 第九篇】JavaScript(3) - 数组与函数进阶(2026最新版) 本篇对数组和函数进行更深入、实用的讲解,这是 Java Web 开发中处理后端返回数据(JSON 数组/对象列表)和封装业务逻辑的核心技能。 由于你特别…...
告别轮询!GD32F407 ADC+DMA+定时器触发,实现多通道自动采集与存储
GD32F407 ADCDMA定时器触发:多通道自动采集系统设计指南 在物联网节点和工业监测设备开发中,高效稳定的数据采集系统是核心基础。传统轮询式ADC采集不仅占用大量CPU资源,还难以满足多通道同步、高精度定时采集的需求。本文将深入讲解基于GD32…...
8人SolidWorks研发共享一台服务器——性能算力共享智能按需分配
8人SolidWorks研发团队可借助云飞云智能共享云桌面,通过以下方式实现一台服务器的性能算力共享与智能按需分配。一、核心硬件配置CPU:选择多核高主频处理器,如Intel Core i9 14900K(24核32线程)或AMD锐龙9 9950X&#…...
Asp.Net MVC杂谈之:—步步打造表单验证框架[重排版](1)
在实际使用中,我们可以考虑多种形式来进行这一验证(注:本文目前只研究服务器端验证的情况),最直接的方式莫过于对每个表单值手动用C#代码进行验证了,比如: if(!Int32.TryParse(Request.Form[“age”], out age)){ xxxx… } If(age < xxx || age > xxx){ xxxx… }…...
STM32 PWR电源管理与低功耗模式实战指南
1. STM32电源管理基础与实战意义 在嵌入式系统开发中,电源管理往往是最容易被忽视却至关重要的环节。想象一下你的智能手环如果每天都需要充电,或者无线传感器节点每隔几小时就要更换电池,这样的产品显然缺乏实用价值。STM32的PWR模块正是为解…...
GLM-4.1V-9B-Base基础教程:Web界面支持的图片格式/大小/分辨率清单
GLM-4.1V-9B-Base基础教程:Web界面支持的图片格式/大小/分辨率清单 1. 模型简介 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型,专门用于处理图像内容识别、场景描述、目标问答和中文视觉理解任务。这个模型已经完成了Web化封装,可以直接…...
