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

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

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

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

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

策略模式

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

组合模式

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

实践运用

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

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

public interface IShape{    void Draw();}

接下来,我们实现几种具体的形状类,它们实现了IShape接口:k3R28资讯网——每日最新资讯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.");    }}

现在,我们来实现组合形状类,它使用组合模式来组合多个形状:k3R28资讯网——每日最新资讯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();        }    }}

最后,我们可以在客户端代码中使用这些形状和组合形状:k3R28资讯网——每日最新资讯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类则使用了组合模式,允许我们将多个形状组合成一个复合形状,并统一处理它们的绘制操作。k3R28资讯网——每日最新资讯28at.com

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

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新业务到 2022 年底还是 0,希望 2023 年出来一个 1。&rdquo;这是2022年底,李彦宏
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top