.NET高级面试指南专题十七【 策略模式模式介绍,允许在运行时选择算法的行为】

news2024/11/17 3:35:31

在这里插入图片描述

介绍:

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它定义了一系列算法,将每个算法封装到一个对象中,并使它们可以互相替换。这使得算法可独立于使用它的客户端变化。

原理:

策略接口(Strategy Interface):定义一组算法的接口。
具体策略类(Concrete Strategy Classes):实现策略接口的具体算法。
上下文类(Context Class):维护一个对策略对象的引用,并在运行时选择所需的具体策略。

优点:

灵活性: 能够在运行时动态地改变对象的行为。
可扩展性: 容易增加新的算法或策略。
复用性: 可以复用现有的算法,不需要重复实现。

缺点:

增加对象数量:每个具体策略都会创建一个对象,可能会导致类的数量增加。
客户端必须知道策略:客户端需要了解不同的策略,以便选择正确的策略。

代码示例

using System;

// 策略接口
interface IStrategy
{
    void Execute();
}

// 具体策略类A
class ConcreteStrategyA : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy A");
    }
}

// 具体策略类B
class ConcreteStrategyB : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy B");
    }
}

// 上下文类
class Context
{
    private IStrategy _strategy;

    public Context(IStrategy strategy)
    {
        _strategy = strategy;
    }

    public void SetStrategy(IStrategy strategy)
    {
        _strategy = strategy;
    }

    public void ExecuteStrategy()
    {
        _strategy.Execute();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建上下文对象
        Context context = new Context(new ConcreteStrategyA());

        // 执行策略A
        context.ExecuteStrategy();

        // 切换到策略B
        context.SetStrategy(new ConcreteStrategyB());

        // 执行策略B
        context.ExecuteStrategy();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用BBDown下载bilibili视频的方法

一款命令行式哔哩哔哩下载器. Bilibili Downloader. 下载地址 https://github.com/nilaoda/BBDown 功能 番剧下载(Web|TV|App) 课程下载(Web) 普通内容下载(Web|TV|App) 合集/列表/收藏夹/个人空间解析 多分P自动下载 选择指定分P进行下载 选择指定清晰度进行下载 下载外挂字幕…

基于springboot+vue实现电子商务平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现电子商务平台管理系统演示 研究的目的和意义 据我国IT行业发布的报告表明,近年来,我国互联网发展呈快速增长趋势,网民的数量已达8700万,逼近世界第一,并且随着宽带的实施及降价,每天约有…

实现微服务:匹配系统

HTTP与WebSocket协议 1. HTTP协议是无状态的,每次请求都是独立的,服务器不会保存客户端的状态信息。而WebSocket协议是有状态的,一旦建立连接后,服务器和客户端可以进行双向通信,并且可以保持连接状态,服务…

基于Java的海南旅游景点推荐系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

Let’s Move Sui , 一起来学习吧

Let’s Move Sui是一个全新的交互式学习平台,通过SuiFrens的帮助教您如何在Sui上构建。设计供新手和经验丰富的开发者使用,Let’s Move Sui提供了一次非凡的Sui开发之旅,利用了Move在Sui上的独特之处,从基于对象的数据模型的基础知…

WPF —— Grid网格布局

1 :Grid网格布局简介 Grid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。 2:网格标签Grid.ColumnDef Grid.ColumnDefinitions自定义列 只能设置宽度 不能设置高度ColumnDefinition 每一个列可以设置宽度,…

windows 免密码ssh登录linux

参考:https://blog.csdn.net/qq285744011/article/details/118293937 1)windows先生成公钥私钥 ssh-keygen -t rsa -C "你的邮箱地址"生成后放在用户命令.ssh文件下 2)把公钥复制到linux /root/.ssh/authorized_keys 3)然后就可…

未解决的问题:字符数组中元素的个数

情形1&#xff1a; #include<stdio.h> int main() {int arr_int1[10];int arr_int2[]{1,2,3,4,5};char arr_char1[10];char arr_char2[]"world";char arr_char3[]{h,e,l,l,o};int i;i0;while(arr_char2[i]!\0){i;}printf("%d\n",i);i0;while(arr_ch…

【MMDetection3D实战4】利用mmdet3d进行训练

文章目录 1. 介绍1.1 训练流程1.2 测试及验证2. 训练过程演示2.1 准备数据集并处理2.2 加载并修改配置文件2.3 启动训练2.4 测试1. 介绍 1.1 训练流程 MMDetection3D(mmdet3d)和OpenMMlab其他代码库是一样的,在训练的时候需要准备好一个配置文件,在配置文件中定义好所使用的…

2.MongoDB与关系数据库对比

MongoDB的简单操作与比较 与关系数据库对比 MySQL与MongoDB都是开源的常用数据库&#xff0c;但是MySQL是传统的关系型数据库&#xff0c;MongoDB则是非关系型数据库&#xff0c;也叫文档型数据库&#xff0c;是一种NoSQL的数据库。它们各有各的优点&#xff0c;来看看他们之…

轮趣 IMU N100 九轴 IMU 在 ROS 下安装驱动

本篇介绍如何在ROS环境中使用 WHEELTEC N100 惯导模块。 轮趣 IMU N100 的 ROS 驱动程序下载链接&#xff1a;轮趣 IMU 资料 - 坚果云 - 云盘|网盘|企业网盘|同步|备份|无限空间|免费网络硬盘|企业云盘 1、CP2102 固定串口号 1.1 、修改串口号 在 Windows 中需要把 WHEELTE…

H5 宠物店官网源码

源码名称&#xff1a;H5宠物店官网源码 源码介绍&#xff1a;一款宠物店官网单页源码&#xff0c;可以用于开设宠物店宣传页、宠物店官网。源码H5自适应无后台。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/11098.html

Linux-vim显示乱码

Linux运维工具-ywtool 目录 一.问题二.解决2.1 编辑VIM的配置文件2.2 添加以下内容 一.问题 用vim编辑的时候,中文显示乱码 二.解决 2.1 编辑VIM的配置文件 vim ~/.vimrc #如果这个文件不存在,创建一个即可2.2 添加以下内容 添加完成以后就不会在出现中文乱码了 set fil…

操作系统系列学习——CPU调度策略

文章目录 前言CPU调度策略 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工大…

1.7 什么是可变形卷积?可变形卷积旨在解决哪类问题?

1.7 什么是可变形卷积&#xff1f;可变形卷积旨在解决哪类问题&#xff1f; 问题&#xff1a;深度卷积神经网络在许多视觉任务上获得了重大突破&#xff0c;其强大的特征提取能力避免了传统的人工特征工程的弊端。然而&#xff0c;普通的卷积操作是在固定的、规则的网格点上进…

为什么要用scrapy爬虫库?而不是纯python进行爬虫?

为什么要用scrapy爬虫库&#xff1f;而不是纯python进行爬虫&#xff1f; Scrapy的优点Scrapy节省的工作使用纯Python编写爬虫的不足 Scrapy是一个使用Python编写的开源和协作的web爬虫框架&#xff0c;它被设计用于爬取网页数据并从中提取结构化数据。Scrapy的强大之处在于其广…

安装kibaba

官方地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 直接下载就可以 安装好了之后开始配置文件/kibana/config打开kibanba.yml server.port:5601 服务器地址 sercer.name:kibana 服务器名称 kibana.index:.kibana 索引 elasticsearch.hosts:[http://1…

Python数学建模-2.3函数(下)

2.3.2模块的导入与使用 模块在Python中是一个包含Python定义和语句的文件&#xff0c;通常用来组织代码&#xff0c;使得代码更易于管理和复用。下面&#xff0c;我将详细讲解Python函数中模块的使用知识。 1. 模块的导入 在Python中&#xff0c;你可以使用import语句来导入…

IDEA中配置Tomcat

文章目录 一、创建Web项目二、配置tomcat三、启动Tomcat 一、创建Web项目 1.首先我们要用IDEA创建一个普通的java项目。 2.我创建的项目名称为myTomcat&#xff0c;想要开发web程序&#xff0c;我们还要做一下操作。 首先我们先给项目添加框架支持...&#xff0c;我的 idea 版…

Python实现BOA蝴蝶优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…