1. 设计模式概述:从编码困境到优雅解耦
在面向对象软件开发中,我们常常会遇到一些反复出现的代码结构问题。比如业务逻辑与界面过度耦合导致难以维护,对象创建逻辑分散在各处造成重复代码,不同子系统之间通信方式混乱等等。这些痛点正是设计模式要解决的核心问题。
设计模式不是具体的代码片段,而是针对特定场景的解决方案模板。就像建筑领域的结构图纸,它提供了经过验证的最佳实践方案。1994年出版的《设计模式:可复用面向对象软件的基础》(俗称GoF书)首次系统化提出了23种经典设计模式,这些模式至今仍是软件开发的重要基石。
重要提示:设计模式不是银弹,滥用模式反而会增加系统复杂度。正确的做法是先理解问题本质,再选择匹配的模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建型模式:对象创建的优雅之道
2.1 单例模式(Singleton)
当系统中某个类只需要存在一个实例时(如配置管理器、线程池),单例模式通过私有构造函数和静态实例字段确保全局唯一性。C#中实现需要注意线程安全问题:
csharp复制public class Singleton {
private static readonly Lazy<Singleton> _instance =
new Lazy<Singleton>(() => new Singleton());
private Singleton() { }
public static Singleton Instance => _instance.Value;
}
实际应用场景:
- 应用程序的配置管理
- 日志记录器
- 设备驱动访问点
常见误区:
- 过度使用单例导致"上帝对象"
- 未考虑多线程环境下的初始化竞争
2.2 工厂方法模式(Factory Method)
定义一个创建对象的接口,但让子类决定实例化哪个类。这种延迟实例化的方式特别适合插件式架构:
csharp复制public abstract class Document {
public abstract void Save();
}
public class WordDocument : Document {
public override void Save() => Console.WriteLine("Saving as .docx");
}
public abstract class Application {
public abstract Document CreateDocument();
public void NewDocument() {
Document doc = CreateDocument();
// 使用文档...
}
}
public class WordApplication : Application {
public override Document CreateDocument() => new WordDocument();
}
模式优势:
- 符合开闭原则(对扩展开放,对修改关闭)
- 将产品知识局部化到具体工厂
- 便于实现跨平台UI组件创建
2.3 抽象工厂模式(Abstract Factory)
提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。这在需要保证产品兼容性时特别有用:
csharp复制public interface IGUIFactor
