首页 > 编程语言 >C#中的设计模式:构建更加优雅的代码

C#中的设计模式:构建更加优雅的代码

时间:2025-01-12 22:32:37浏览次数:3  
标签:C# void component 优雅 class Operation 设计模式 public

C#在面向对象编程(OOP)方面的强大支持,我们可以探讨“C#中的设计模式”。这不仅有助于理解如何更好地组织代码,还能提高代码的可维护性和可扩展性。


引言

设计模式是软件工程中经过实践验证的解决方案模板,它们提供了一种标准化的方法来解决常见的开发问题。对于使用C#进行开发的程序员来说,理解和应用这些模式可以帮助创建结构良好、易于维护和扩展的应用程序。本文将介绍几种常用的设计模式,并展示如何用C#实现它们。

单例模式 (Singleton Pattern)

单例模式确保一个类只有一个实例,并提供全局访问点。它常用于需要控制资源访问的情况,比如数据库连接池或配置管理器。

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // Private constructor to prevent instantiation.
    private Singleton() { }

    public static Singleton Instance
    {
        get { return instance; }
    }
}
工厂方法模式 (Factory Method Pattern)

工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。这种方式将对象创建的责任交给子类,增加了灵活性。

public abstract class Creator
{
    public abstract Product FactoryMethod();
}

public class ConcreteCreator : Creator
{
    public override Product FactoryMethod()
    {
        return new ConcreteProduct();
    }
}
观察者模式 (Observer Pattern)

观察者模式定义了对象间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会收到通知并自动更新。这对于实现事件驱动系统非常有用。

public interface IObserver
{
    void Update(string message);
}

public class Subject
{
    private List<IObserver> _observers = new List<IObserver>();

    public void Attach(IObserver observer)
    {
        _observers.Add(observer);
    }

    public void NotifyObservers(string message)
    {
        foreach (var observer in _observers)
        {
            observer.Update(message);
        }
    }
}
装饰器模式 (Decorator Pattern)

装饰器模式允许动态地给对象添加职责,而不改变原有代码。通过组合而非继承的方式,可以灵活地扩展功能。

public abstract class Component
{
    public abstract void Operation();
}

public class ConcreteComponent : Component
{
    public override void Operation()
    {
        Console.WriteLine("ConcreteComponent Operation");
    }
}

public abstract class Decorator : Component
{
    protected Component _component;

    public Decorator(Component component)
    {
        _component = component;
    }

    public override void Operation()
    {
        if (_component != null)
        {
            _component.Operation();
        }
    }
}

public class ConcreteDecorator : Decorator
{
    public ConcreteDecorator(Component component) : base(component) { }

    public override void Operation()
    {
        base.Operation();
        AddedBehavior();
    }

    private void AddedBehavior()
    {
        Console.WriteLine("Added Behavior by ConcreteDecorator");
    }
}
结论

设计模式为解决特定类型的编程问题提供了行之有效的方案。通过学习和实践这些模式,开发者能够编写出更健壮、更具弹性的应用程序。C#作为一种强大的面向对象语言,非常适合用来实现各种设计模式。希望本文能激发您对设计模式的兴趣,并帮助您在未来的项目中加以运用。

参考资料

这篇文章涵盖了几个核心的设计模式及其C#实现,适合有一定基础的读者进一步提升技能。同时,也鼓励读者根据自己的需求探索更多模式和最佳实践。

标签:C#,void,component,优雅,class,Operation,设计模式,public
From: https://blog.csdn.net/2302_82029124/article/details/145100895

相关文章

  • G1原理—5.G1垃圾回收过程之Mixed GC
    大纲1.MixedGC混合回收是什么2.YGC可作为MixedGC的初始标记阶段3.MixedGC并发标记算法详解(一)4.MixedGC并发标记算法详解(二)5.MixedGC并发标记算法详解(三)6.并发标记的三色标记法7.三色标记法如何解决错标漏标问题8.SATB如何解决错标漏标问题9.重新梳理MixedGC......
  • 汽车电子相关的协议UDS、DOIP、CAN
    UDS协议UDS(UnifiedDiagnosticServices,统一诊断服务协议)是一种标准化的通信协议,广泛应用于汽车电子系统中,尤其是在车辆诊断和服务过程中。它用于车辆的诊断、维护、控制和测试,支持通过车载诊断接口(如OBD接口)与汽车的电子控制单元(ECU)进行通信。UDS协议基于ISO14229标......
  • 【Ubuntu 无法使用ifconfig解决办法】
    【Ubuntu无法使用ifconfig解决办法】 Ubuntu无法使用ifconfig解决办法在使用ubuntu时需要使用ifconfig命令提示Command'ifconfig'notfound,didyoumean: command'iconfig'fromdebipmiutil(3.1.5-1)  command'pifconfig'fromdebpython3-ethtool(0.14-3......
  • c语言的基本类型及输入输出占位符
    基本类型c语言的基本类型:int【long、short、unsigned、signed(c90)】、char、float、double、_Bool【布尔值】、_complex、_Imaginary【复数和虚数】输入输出printf标志字符标志含义-转换的结果在字段内左对齐+有符号的转换结果总是以+或者-开始空格如果......
  • 【C#写MCmod(Fabric)】第一期:介绍NativeLoader
    我知道你第一时间点进来想看什么,但你先别急,我先讲个故事想当年,主播第一次玩到的MCJava版是1.7.9,那个时候大家都以为下个版本是1.8.0,没想到是1.7.10,给大伙整够呛一看时间,十多年过去了,真√⑧快啊,也没有之前玩MC的感觉了这个时候就有小伙子会说:“乂,那是你没装MOD,来两个高兴一下......
  • LeetCode:65.有效数字
    LeetCode:65.有效数字解题步骤构建一个表示状态的图。遍历字符串,并沿着图走,如果到了某个节点无路可走就返false。遍历结束,如走到3/5/6,就返回true,否则返回false。extend281016进制/***检查一个字符串是否可以表示为一个有效的数字*@param{string}s-待检查的字......
  • javaScript介绍
    JavaScript概述JavaScript是世界上最流行的脚本语言Java和JavaScript没有真正上的联系历史https://blog.51cto.com/u_39037/10505185ECMAScript它可以理解为是javaScript的一个标准快速入门引入JavaScript1.内部标签<script>//....</script>2.外部引用a......
  • C语言小作业,基于C语言的图书检索
        输入n本图书名称,在图书中检索包含C语言的图书,并输出符合要求的图书名称。说明:n最大为100,图书名称最大长度为50。string.h中有strstr函数,strstr函数是一个字符串处理的函数,它的主要功能是在一个字符串中查找另一个字符串(子字符串)的首次出现位置。本题中可以调用它......
  • Cline 免费插件 + Qwen2.5 大模型,零经验也能开发“对联王”微信小程序
    小朋友即将放寒假了,意味着春节就不远了。在我们湖北老家,当我还是学生的时候,每年临近春节,写春联、贴春联和对春联是读书人一件乐事。如今,老牛同学早已不是读书人,但还是怀念那时快乐时光,因此想在春节前撸一个“对联王”微信小程序,专门用于创作春联和对春联。上次零经验的我们,借助......
  • rpc
    为什么需要RPC:​ 为了将本地服务转化为异地服务调用的时候,还能够和本地调用一样。​ 屏蔽掉本地异地的区别使用的前提:2边的服务都是启动的学习点:参数传递:参数传递有两种形式:一种是按值传递,另外一种是按引用传递。按值传递参数的情况相对比较简单,我们只需要把值复制到网......