当前位置:首页 > 科技  > 软件

策略模式与组合模式在C#中的实践运用

来源: 责编: 时间:2024-06-20 08:59:22 212观看
导读在软件开发中,设计模式是解决常见设计问题的最佳实践。策略模式和组合模式是两种常见的设计模式,它们可以帮助我们构建灵活且可维护的代码。本文将通过C#代码示例,展示如何在实践中结合使用策略模式和组合模式。策略模式

在软件开发中,设计模式是解决常见设计问题的最佳实践。策略模式和组合模式是两种常见的设计模式,它们可以帮助我们构建灵活且可维护的代码。本文将通过C#代码示例,展示如何在实践中结合使用策略模式和组合模式。f2D28资讯网——每日最新资讯28at.com

f2D28资讯网——每日最新资讯28at.com

策略模式

策略模式(Strategy Pattern)定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。f2D28资讯网——每日最新资讯28at.com

组合模式

组合模式(Composite Pattern)允许你将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端统一处理单个对象和对象的组合。f2D28资讯网——每日最新资讯28at.com

实践运用

假设我们正在开发一个绘图程序,该程序需要支持绘制不同的形状,如圆形、矩形和三角形。每种形状都有自己的绘制策略。此外,我们还想支持组合形状,即一组形状的组合,它们可以一起被绘制。f2D28资讯网——每日最新资讯28at.com

首先,我们定义一个IShape接口,表示一个可以绘制的形状:f2D28资讯网——每日最新资讯28at.com

public interface IShape{    void Draw();}

接下来,我们实现几种具体的形状类,它们实现了IShape接口:f2D28资讯网——每日最新资讯28at.com

public class Circle : IShape{    public void Draw()    {        Console.WriteLine("Drawing a circle.");    }}public class Rectangle : IShape{    public void Draw()    {        Console.WriteLine("Drawing a rectangle.");    }}public class Triangle : IShape{    public void Draw()    {        Console.WriteLine("Drawing a triangle.");    }}

现在,我们来实现组合形状类,它使用组合模式来组合多个形状:f2D28资讯网——每日最新资讯28at.com

public class CompositeShape : IShape{    private List<IShape> _shapes = new List<IShape>();    public void Add(IShape shape)    {        _shapes.Add(shape);    }    public void Remove(IShape shape)    {        _shapes.Remove(shape);    }    public void Draw()    {        foreach (var shape in _shapes)        {            shape.Draw();        }    }}

最后,我们可以在客户端代码中使用这些形状和组合形状:f2D28资讯网——每日最新资讯28at.com

class Program{    static void Main(string[] args)    {        // 创建单个形状        IShape circle = new Circle();        IShape rectangle = new Rectangle();        IShape triangle = new Triangle();        // 创建组合形状        CompositeShape compositeShape = new CompositeShape();        compositeShape.Add(circle);        compositeShape.Add(rectangle);        compositeShape.Add(triangle);        // 绘制单个形状        circle.Draw(); // 输出: Drawing a circle.        rectangle.Draw(); // 输出: Drawing a rectangle.        triangle.Draw(); // 输出: Drawing a triangle.        // 绘制组合形状        compositeShape.Draw();         // 输出:         // Drawing a circle.        // Drawing a rectangle.        // Drawing a triangle.    }}

在这个示例中,我们结合了策略模式和组合模式。每种形状都实现了IShape接口,从而定义了它们自己的绘制策略。而CompositeShape类则使用了组合模式,允许我们将多个形状组合成一个复合形状,并统一处理它们的绘制操作。f2D28资讯网——每日最新资讯28at.com

这种结合使用设计模式的做法可以提高代码的灵活性和可维护性,使得我们的绘图程序能够轻松地支持更多的形状类型,并且能够方便地组合和绘制这些形状。f2D28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95005-0.html策略模式与组合模式在C#中的实践运用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: MathWorks 全球副总裁 Richard Rovner:聚焦AI领域,专注技术和产品创新,赋能企业发展

下一篇: 闪光灯与常亮灯二合一!金贝米奇朵 H1 发布,轻量化拍摄布光新利器

标签:
  • 热门焦点
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
Top