设计模式:单例模式
概述
定义
执行
真实案例
大家好,感谢各位的到来!我决定开始写一些文章,分享我对设计模式的理解。设计模式能够为软件开发中反复出现的问题提供通用且可复用的解决方案。首先,我们将一起来了解一下单例模式。
概述
定义
单例模式:指所讨论的单一个体或事物。
单例模式是一种创建型设计模式。它指的是一个类在任何给定时间点都只有一个实例。如果我们尝试第二次实例化单例类,新变量仍然指向之前创建的第一个实例。
接下来,我们来看看这种模式的实现,然后讨论一下它可以帮助解决哪些问题。
执行
为了实现单例模式,该类具有两个主要特征:
- 构造函数是私有的。
- 有一个静态方法可以返回 Singleton 实例。
这些特性使我们能够先为尚未实例化的类创建一个实例,然后在需要调用该类时返回该实例。
使用 C# 时,该模式如下所示:
using System;
public class Program
{
public static void Main()
{
Singleton object1 = Singleton.Instance();
Singleton object2 = Singleton.Instance();
if (object1 == object2)
Console.WriteLine("They're the same instance!");
}
}
/// <summary>
/// The Singleton class.
/// </summary>
class Singleton
{
private static Singleton myInstance;
// 1. The constructor is private.
private Singleton() { }
// 2. Static method that returns the Singleton instance.
public static Singleton Instance()
{
if (myInstance == null)
myInstance = new Singleton();
return myInstance;
}
}
在这种情况下,程序会输出字符串“它们是同一个实例!”。你可以在.NET Fiddle上体验这段代码。
真实案例
太好了,现在我们可以编写一个在程序中一次只存在一个实例的类了!这有什么用呢?这种模式可以帮助解决哪些常见的软件开发问题?
单例模式在访问应用程序整体使用的资源时尤为有用,因为当多个实例同时访问该资源时可能会出现问题(它有助于解决并发问题)。许多常见的开发场景都可能涉及这种情况,例如硬件接口访问和将数据记录到文件。
在硬件接口访问的情况下,我们可能连接到同时被多个实例访问的硬件,而这些实例可能会出现并发问题。例如,单例模式可以帮助打印机按特定顺序打印文档,避免死锁。在将数据记录到文件的情况下,可能存在多个客户端同时向同一个文件记录日志的情况。单例模式可以帮助防止并发访问该日志文件时出现问题。