C#设计模式与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# 设计模式:完整示例指南



设计模式是软件开发中常见问题的成熟解决方案。在 .NET 生态系统和 C# 中,掌握设计模式尤为重要,因为许多模式已直接集成到平台中(例如用于 Dispose 模式的 IDisposable)。本文将根据 GoF(四人帮)分类法,通过 C# 实际示例介绍三大类设计模式。



创建型模式



创建型模式负责对象创建,使系统独立于对象的创建、组合和表示方式。



单例模式



确保一个类只有一个实例,并提供全局访问点。在 C# 中常用于日志记录器、缓存或配置管理。



public sealed class Logger{    private static readonly Lazy<Logger> _instance =         new Lazy<Logger>(() => new Logger());

public static Logger Instance => _instance.Value;

private Logger() { }

public void Log(string message) { Console.WriteLine($"[{DateTime.Now}] {message}"); }}

// 使用示例Logger.Instance.Log("应用程序已启动");


工厂方法模式



定义创建对象的接口,但让子类决定实例化哪个类。适用于需要扩展的逻辑。



public interface ITransport{    void Deliver();}

public class Truck : ITransport{ public void Deliver() => Console.WriteLine("公路运输");}

public class Ship : ITransport{ public void Deliver() => Console.WriteLine("海运配送");}

public abstract class Logistics{ public abstract ITransport CreateTransport();

public void PlanDelivery() { var transport = CreateTransport(); transport.Deliver(); }}

public class RoadLogistics : Logistics{ public override ITransport CreateTransport() => new Truck();}

public class SeaLogistics : Logistics{ public override ITransport CreateTransport() => new Ship();}

// 使用示例Logistics logistics = new RoadLogistics();logistics.PlanDelivery(); // 公路运输


结构型模式



结构型模式定义类和对象的组合方式,以形成更大的结构。



适配器模式



将一个类的接口转换为客户端期望的另一个接口。常用于集成第三方库或遗留代码。



// 目标接口(ITarget)public interface IXmlParser{    string ParseToXml(string data);}

// 适配者类public class JsonParser{ public string ParseToJson(string data) { return $"{{\\"data\\": \\"{data}\\"}}"; }}

// 适配器public class JsonToXmlAdapter : IXmlParser{ private readonly JsonParser _jsonParser;

public JsonToXmlAdapter(JsonParser jsonParser) { _jsonParser = jsonParser; }

public string ParseToXml(string data) { var json = _jsonParser.ParseToJson(data); // 最简单的 JSON 到 XML 转换 return $"<data>{data}</data>"; }}

// 使用示例var adapter = new JsonToXmlAdapter(new JsonParser());string xml = adapter.ParseToXml("Hello");Console.WriteLine(xml); // <data>Hello</data>


装饰器模式



动态地为对象添加新职责。在 C# 中通常通过继承或组合实现。



public interface INotifier{    void Send(string message);}

public class E

博客

书籍推荐