C#设计模式之策略模式

策略模式简介

策略模式在设计模式中属于对象行为型模式,它的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。

策略模式的图解如下所示:

image-20240102101923246

示例

本文通过一个简单的例子来向大家介绍C#如何使用策略模式。本文以出行这个行为举例,出行我们可以使用多种方式,比如自己开车、乘坐公交、骑自行车等。

1、定义策略接口

public interface ITravelStrategy{public void Print();}

我们定义了一个出行策略接口,只定义了一个Print方法。

2、实现具体策略类

 public class Car : ITravelStrategy{public void Print(){Console.WriteLine("乘坐汽车出行\r\n");}}public class Bike : ITravelStrategy{public void Print(){Console.WriteLine("骑自行车出行\r\n");}}public class Bus : ITravelStrategy{public void Print(){Console.WriteLine("乘坐公交出行\r\n");}}

定义了三个具体策略类分别为Car、Bike与Bus,都实现了ITravelStrategy接口,它们的实现是不同的。

3、实现上下文类

 public class TravelContext{private ITravelStrategy _strategy;public TravelContext(ITravelStrategy strategy){_strategy = strategy;}public void SetStrategy(ITravelStrategy strategy){_strategy = strategy;}public void ExecuteStrategy(){_strategy.Print();}}

该上下文类维护一个对ITravelStrategy对象的引用,可以在构造函数中为其指定一个具体的策略类,它还提供了SetStrategy方法来改变策略,ExecuteStrategy方法来执行策略。

4、使用策略模式

static void Main()
{// 创建上下文并设置初始策略TravelContext travelContext = new TravelContext(new Car());travelContext.ExecuteStrategy();// 切换策略为坐公交出行travelContext.SetStrategy(new Bus());travelContext.ExecuteStrategy();// 切换策略为骑自行车出行travelContext.SetStrategy(new Bike());travelContext.ExecuteStrategy();Console.ReadLine();
}

运行结果:

image-20240102104738633

该示例的图解如下所示:

image-20240102100052307

总结

使用策略模式的步骤总结如下:

image-20240102110113643

希望对你有所帮助。

Ref

1、《Head First 设计模式(中文版)》

2、《大话设计模式》

3、《设计模式:可复用面向对象软件的基础》

4、YouTube Strategy Pattern - Design Patterns in C#

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins+pytest+allure

jenkinspytestallure allure下载地址 Releases allure-framework/allure2 GitHub allure环境变量配置 allure --version 查看版本(确定是否配置完成) python安装allure插件 pip install allure-pytest pytest的运行指令 pytest -sv test_demo.py 开发完毕后将代码上传到…

Python-docx 深入word源码 带有序号的段落无法设置段后、段前距离、间距等段落属性

如果使用p doc.add_paragraph(内容, styleList Number)来创建序号段落,会发现设置序号段落之间的段前、段后以及段落间距无法生效。后来将docx库生成的word文档打开后发现段落的设置出现问题,如下图红框所示,将该选项去掉即可使段落间距属性…

PACC:数据中心网络的主动 CNP 生成方案

PACC:数据中心网络的主动 CNP 生成方案 文章目录 PACC:数据中心网络的主动 CNP 生成方案PACC算法CNP数据结构PACC参数仿真结果参考文献 PACC算法 CNP数据结构 PACC参数 仿真结果 PACC Hadoop Load0.2 的情况: PACC Hadoop Load0.4 的情况&a…

谷歌Gemini Pro模型 Api 调用

写在前面 本篇博客主要介绍如下内容 Gemini Pro模型 ApiKey的申请 Gemini Pro模型 Api调用的方法 几个模型Api调用的demo程序 调用Gemini Pro模型中可能遇到的问题及解决方案 模型 ApiKey的申请 注册好Google账号,并在浏览器完成登录访问 : https://makersuite.g…

孩子写作业用什么品牌的护眼台灯好?2024备考台灯推荐

随着近视度数的不断加深,眼轴会被过度拉长,导致各种眼病高发。调查发现,600度以上的高度近视人群,发生视网膜脱落、白内障、青光眼、黄斑变性等疾病的风险,比普通人高很多。这些眼病均可导致视力严重下降,严…

【Python动漫系列】高级皮卡丘(完整代码)

文章目录 皮卡丘环境需求完整代码皮卡丘 皮卡丘是《宠物小精灵》系列中的一种可爱的电气宝可梦,是最受欢迎的角色之一。它是由杉森建设计师创造并在游戏、动画和电影中广泛展现的。 皮卡丘的外观非常独特,它身体呈黄色,耳朵上有两个黑色的竖耳朵,脸上有两个红色的圆圈,两…

新手入门安装PyTorch及其测试验证

目录 检查系统要求 安装PyTorch 通过pip在windows环境中安装GPU版本: 使用conda方式在windows中安装GPU版本 在windows环境安装cpu版本 验证安装 总结 检查系统要求 在开始安装PyTorch之前,请确保你的系统满足以下要求: Python版本…

【K8S 部署】基于kubeadm搭建Kurbernetes集群

目录 一、基本架构 二、环境准备: 三、安装部署 1、所有节点安装docker 2、、所有节点安装kubeadm,kubelet和kubectl 3、配置网络--flannel 4、测试 pod 资源创建 四、安装部署与k8s集群对接的Harbor仓库 五、Dashboard安装部署: 一、基本架构…

人工智能_机器学习085_DBSCAN算法介绍_具有噪声基于密度的聚类_基于密度的空间聚类方法---人工智能工作笔记0125

然后我们再来看一种聚类算法,叫做DBSCAN算法 可以看到,他和KMeans的原理完全不一样, 这个是基于密度的聚类方法,就是在一堆数据中,把密度最大的数据,归为一类 这里的划分为簇,其实就是 划分类别的意思 这个簇,就跟鱼群一样,一个鱼群中肯定是同一种鱼类. 然后我们再来看,DBSC…

京东tp3手势验证

2024祝我们越来越好。 新年第二天,来看下这最新的tp3手势验证码,很在之前就发过一篇,最近看了看更新了一个东西,但是难点还是在轨迹上面,感兴趣的朋友可以去看看。 risk_jd[jstub] 改了下这,之前我都没带…

【设计模式-2】原型模式的原理、代码实现及类图展示

我们一定对类的实例化比较熟悉,前面我们说的单例、还有3种工厂模式都是通过new关键字来创建对象,下面我们来了解一种新的对象创建的方式。 1. 定义 原型模式也是一种创建型的设计模式,实现和原理总体比较简单,一句话总结呢&#…

微信商户号证书和密钥设置详细教程

1.先进入微信商户平台扫码登录微信商户号 微信商户平台 2.进入账户中心-API安全 3.申请API证书 3.1申请证书时按指引下载这个工具,这个工具里面包含你的证书信息 3.2 按指引安装该证书,安装完成以后证书会下载到你电脑的本地文件目录 4. 设置APIV2密…