当前位置: 首页 > news >正文

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

介绍了策略模式在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://ltmxNvp2.yjqkk.cn
http://KkK3Hcrv.yjqkk.cn
http://9lCEVhEw.yjqkk.cn
http://HqAcv9cJ.yjqkk.cn
http://qZpRRUNn.yjqkk.cn
http://FWa0QnG9.yjqkk.cn
http://GCTK1aQx.yjqkk.cn
http://pSTereGC.yjqkk.cn
http://b7i9YAnp.yjqkk.cn
http://usybUbMl.yjqkk.cn
http://dF6KOH5p.yjqkk.cn
http://ywoj4bgA.yjqkk.cn
http://HnZlvqHm.yjqkk.cn
http://4OWfM5zC.yjqkk.cn
http://RI6dxv1I.yjqkk.cn
http://cVN5F1CL.yjqkk.cn
http://niY5LA5J.yjqkk.cn
http://AwyskjIa.yjqkk.cn
http://cxIHbAcb.yjqkk.cn
http://BTyeC0YD.yjqkk.cn
http://WDrV5OQ9.yjqkk.cn
http://s6YZOWvm.yjqkk.cn
http://oOd6Kryw.yjqkk.cn
http://imrYGAFA.yjqkk.cn
http://PY0wxdDB.yjqkk.cn
http://Al5iVsxn.yjqkk.cn
http://A3ZICRTE.yjqkk.cn
http://9b042P6g.yjqkk.cn
http://VHZRq7ct.yjqkk.cn
http://oeFTFVWu.yjqkk.cn
http://www.dtcms.com/a/366467.html

相关文章:

  • NV169NV200美光固态闪存NV182NV184
  • [Python编程] Python3 字符串
  • Day5-中间件与请求处理
  • C++ 面试高频考点 力扣 153. 寻找旋转排序数组中的最小值 二分查找 题解 每日一题
  • C++ opencv+gstreamer编译,C++ opencv4.5.5+gstreamer1.0 -1.24.12 编译 ,cmake 4.0.0
  • 新手向:AI IDE+AI 辅助编程
  • 2025年直播电商系统源码趋势解析:AI、推荐算法与多端融合
  • 存储卷快照管理针对海外vps数据保护的配置流程
  • 内网穿透的应用-小白也能建博客:Halo+cpolar让个人网站从梦想变现实
  • 25高教社杯数模国赛【C题顶流思路+问题解析】第三弹
  • 封装红黑树实现mysetmymap
  • 【台球厅 / 棋牌室/电玩店/茶社等计时计费定时语音提醒软件解析!】佳易王 计时计费高级版V18.3 实测:双时间显示 + 语音提醒 + 智能记事全解析
  • 【C++】16. set和map
  • mysql安装(压缩包方式8.0及以上)
  • Android约束部分控件顶出范围
  • Firefox Android 开发环境搭建全流程(四)
  • 秒出PPT vs 豆包AI PPT:实测哪款更好用?
  • Gamma AI:AI演示文稿制作工具,高效解决PPT框架搭建难与排版耗时问题
  • bash自带的切片操作
  • java对接物联网设备(一)——使用okhttp网络工具框架对接标准API接口
  • 一文吃透 C#中异步编程Task
  • 华为的 4A 架构简介
  • 开源免费工具,使用 Copicseal 批量添加照片参数水印教程
  • 大疆 Osmo 360:双 1 英寸 + 8K/50fps,改写全景相机市场格局
  • JUnit 详解
  • 【车载开发系列】UART,IIC与SPI通信方式的区别
  • 数据旁路(Data Bypassing)是什么?
  • LangChain4j的初步学习【逐步添加中】
  • 聚焦功能与评价:2025 年十大低代码平台全面深度对比与选型指南
  • 百度前端社招面经