策略模式-不同的鸭子的案例

介绍了策略模式在C#中的应用,以一个鸭子的例子来说明。首先定义了鸭子类以及鸭子的行为(方法),然后通过继承和实现接口的方式来定义不同种类的鸭子的特性。介绍了策略模式的概念,将相同的算法封装在不同的类中,通过传入不同的算法对象来实现不同的行为。最后,策略模式的优势,可以避免重复的代码,提高代码的复用性和可维护性。


Duck myduck = new Duck(new WhiteDuck(),new SwimDuck(),new FlyDuckNo());
myduck.Display();
myduck.Swim();
myduck.Fly();/////////////////////////////////////////////////////////////////////////////////////////
//以一个鸭子的例子来说明。首先定义了鸭子类以及鸭子的行为(方法)
//然后通过继承和实现接口的方式来定义不同种类的鸭子的特性
//将相同的算法封装在不同的类中,通过传入不同的算法对象来实现不同的行为
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//定义鸭子类
/////////////////////////////////////////////////////////////////////////////////////////
class Duck
{IDisplay _display;ISwim _swim;IFly _fly;//构造函数实现策略传入public Duck(IDisplay display, ISwim swim,IFly fly){_display= display;_swim= swim;_fly= fly;}public void Display(){_display.Display();}public void Swim(){_swim.Swim();}public void Fly(){_fly.Fly(); }}/////////////////////////////////////////////////////////////////////////////////////////
//定义功能接口,基于接口实现不同功能策略
///////////////////////////////////////////////////////////////////////////////////////////外观接口
interface IDisplay
{void Display();
}
//定义白鸭子并实现接口
class WhiteDuck : IDisplay
{public void Display(){Console.WriteLine("我是一直白色的鸭子。");}
}
//定义黑鸭子并实现接口
class BlackDuck : IDisplay
{public void Display(){Console.WriteLine("我是一直黑色的鸭子。");}
}//游泳接口
interface ISwim
{void Swim();
}
//定义会游泳鸭子并实现接口
class SwimDuck : ISwim
{public void Swim(){Console.WriteLine("我是一只会游泳的的鸭子。");}
}
//定义不会游泳鸭子并实现接口
class SwimDuckNo : ISwim
{public void Swim(){Console.WriteLine("我是一只不会游泳的的鸭子。");}
}//飞行接口
interface IFly
{void Fly();}
//定义会飞鸭子并实现接口
class FlyDuck : IFly
{public void Fly(){Console.WriteLine("我是一只会飞的的鸭子。");}
}
//定义不会飞鸭子并实现接口
class FlyDuckNo : IFly
{public void Fly(){Console.WriteLine("我是一只不会飞的的鸭子。");}
}

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

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

相关文章

C++语言编程规范-初始化和类型转换

01 C语言编程规范-常量 02 初始化和类型转换 声明、定义与初始化 03 禁止用 memcpy、memset 初始化非 POD 对象 说明:POD 全称是“Plain Old Data”,是 C 98 标准(ISO/IEC 14882, first edition, 1998-09-01)中引入的一个概念, PO…

从零构建一款开源在线客服系统:我的Go语言实战之旅

了解更多,搜索 "程序员老狼"用代码连接世界,让沟通无界限缘起:为什么选择开发客服系统?在数字化浪潮席卷全球的今天,企业与客户之间的沟通方式正在发生深刻变革。传统的电话和邮件支持已无法满足即时互动的需…

unsloth笔记:基本介绍

更快的速度、更省的内存训练、运行、评估大模型 1 支持的模型 All Our Models | Unsloth Documentation 1.1 Dynamic GGUF/instruct 4-bit llama.cpp使用的新模型格式,专为高效、本地推理设计注:GGUF无法微调 只保留推理所需的内容,如量化…

博众测控 | 一文看懂菊水电源产品在半导体测试中的应用

01 半导体在各行业上的应用半导体作为现代工业体系的“核心神经”,其性能参数与应用场景深度绑定,不同行业因核心设备的功能需求差异,对半导体的电流、电压承载能力及类型选择有着明确且严格的要求,具体应用细节如下:1…

【STM32】贪吃蛇 [阶段 8] 嵌入式游戏引擎通用框架设计

这篇博客是 承接:【项目思维】贪吃蛇(嵌入式进阶方向)中 嵌入式游戏引擎雏形(终极进阶), 是我们此前从 “写一个小游戏”提升到“构建可复用游戏框架” 的飞跃阶段。我们以“贪吃蛇游戏”为例,抽…

Vue图标按钮好用的样式

图标按钮示例一 <template><div class"icon-button-group"><button class"icon-btn icon-btn--default"><i class"el-icon-moon"></i></button><button class"icon-btn icon-btn--primary"&g…

Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装

文章目录前言一、Web 概念1.1 Web 的基本概念1.1.1 Web的特点1.2 B/S 架构模型1.3 Web 请求与响应过程&#xff08;重点&#xff09;1.4 静态资源与动态资源1.5 Web 的发展阶段1.6 案例&#xff1a;搭建最小 Web 服务1.6.1 目标1.6.2 搭建步骤1.7 小结二、HTTP 与 HTTPS 协议2.…

一种用geoserver发布复杂样式矢量服务的方法

最近因为系统需要在国产系统中部署&#xff0c;遇见了国产系统不支持ArcGIS的尴尬局面&#xff0c;好在geoserver还是可以支持的&#xff0c;遂用geoserver解决服务问题。 在发布过程中&#xff0c;遇到比较难受的点就是矢量数据的样式配图&#xff0c;在我用QGIS配好导出sld后…

为什么神经网络网络算法比机器学习模型算法更加强大?

神经网络&#xff08;尤其是深度神经网络&#xff09;相比传统机器学习模型&#xff08;如线性回归、决策树、支持向量机等&#xff09;的“强大”主要体现在其更强的表达能力、自适应特征学习能力以及对复杂模式的建模能力。但这种“强大”并非绝对&#xff0c;而是有特定条件…

中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖

中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖 开启ADB教程&#xff1a; 可查看&#xff1a;浪潮CD1000-移动云电脑-RK3528芯片-232G-安卓9-开启ADB ROOT破解教程 可轻松打开了wifi adb和USB调试。 往期详细内容-文章&#xff1a;浪潮CD1000-移动云电脑…

C++两个字符串的结合

这段代码实现字符串拼接功能。用户输入两个字符串a和b后&#xff0c;使用append()方法将b追加到a后面&#xff0c;然后输出拼接后的结果。代码简洁但存在改进空间&#xff1a;1. 缺少输入验证 2. 直接修改原字符串a可能不符合某些场景需求 3. 可考虑更高效的拼接方式。适合基础…

UE4 Rider调试时添加自定义命令行参数

1、打开 Rider 右上角&#xff0c;针对你的项目&#xff08;例如叫做“Mini”&#xff09;打开 Edit 2、输入自定义的参数&#xff0c;如下图的例子是输入 -dx12 -norhithread &#xff0c;然后Apply并OK。3、开始调试&#xff08;虫子按钮&#xff09;

混合架构大型语言模型(Jamba)

Jamba是由AI21 Labs开发的混合架构大型语言模型&#xff08;LLM&#xff09;&#xff0c;结合了Transformer的语义理解能力和Mamba结构化状态空间模型&#xff08;SSM&#xff09;的高效性&#xff0c;旨在解决长文本处理中的计算瓶颈。 一、技术特点 1.混合架构设计 Jamba采用…

2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定详解(一)

基于胎儿Y染色体浓度的孕周与BMI建模分析摘要本文利用某竞赛提供的胎儿Y染色体浓度数据&#xff0c;建立了以孕周和孕妇BMI为自变量的多项式回归模型&#xff0c;探讨了其对Y染色体浓度的影响。通过数据清洗与筛选&#xff0c;共获得1082条有效男胎样本。结果显示&#xff1a;Y…

PyTorch DDP 随机卡死复盘:最后一个 batch 挂起,NCCL 等待不返回

PyTorch DDP 随机卡死复盘&#xff1a;最后一个 batch 挂起&#xff0c;NCCL 等待不返回&#xff0c;三步修复 Sampler & drop_last很多人在接触深度学习的过程往往都是从自己的笔记本开始的&#xff0c;但是从接触工作后&#xff0c;更多的是通过分布式的训练来模型。由于…

计算机专业考研备考建议

对于全国硕士研究生招生考试&#xff08;考研&#xff09;&#xff0c;考试科目主要由两大部分组成&#xff1a;全国统一命题的公共课 和 由招生单位自主命题的专业课。具体的考试科目取决于你报考的专业和学校。下面我为你详细拆解&#xff1a;一、考试科目构成&#xff08;绝…

关于嵌入式学习——单片机1

基础整体概念以应用为中心:消费电子(手机、蓝牙耳机、智能音响)、医疗电子(心率脉搏、呼吸机)、无人机(大疆D)、机器人(人形四足机器人) 计算机技术:计算机五大组成:运算器(数据运算)、控制器(指令控制)、存储器(内存外存)、输入设备(鼠标、键盘、摄像头)、输出设备(显示器)软件…

LightDock.server liunx 双跑比较

LightDock: a new multi-scale approach to protein–protein docking The LightDock server is free and open to all users and there is no login requirement server 1示例 故去除约束 next step 结果有正有负合理 2.常见警告⚠ Structure contains HETATM entries. P…

SQL面试题及详细答案150道(61-80) --- 多表连接查询篇

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 61. 什么是内连接(INNE…

【实操】Noej4图数据库安装和mysql表衔接实操

目录 一、图数据库介绍 二、安装Neo4j 2.1 安装java环境 2.2 安装 Neo4j&#xff08;社区版&#xff09; 2.3 修改配置 2.4 验证测试 2.5 卸载 2.6 基本用法 2.7 windows连接服务器可视化 三、neo4j和mysql对比 3.1 场景对比 3.2 Mysql和neo4j的映射对比 3.3 mys…