大话设计模式:单例模式
程序员文章站
2022-06-05 14:06:20
...
一、什么是单例模式
一个类保证只有一个实例对象,并提供一个访问它的全局访问点
通常我们可以有一个变量可以让 类被全局访问,但不可避免被实例出多个对象,让类自身管理这个实例过程,使得实例只存在一个,且提供一个全局访问的 方法。
UML图
私有一个 自身的实例,私有构造函数,公开一个获得唯一实例的方法。
二、适用场景
1、要求生产唯一***。
2、游戏管理器只需要一个。大家用的话都是用的它。
3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
三、优缺点
优点
在内存里只有一个实例,减少了内存开销
避免对资源的多重占用
缺点
没有接口,与单一职责冲突
四、大话中的例子
点击生成窗口的例子,每点一次就生成一次, 使用单例模式,就不再有这个问题.
五、我的例子
using System;
namespace SingletonMode
{
class Program
{
static void Main(string[] args)
{
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if (s1 == s2)
Console.WriteLine("相同");
Console.WriteLine(Singleton.GetInstance().adress);
}
}
class Singleton
{
private static Singleton one;
private static readonly object syncRoot = new object();
private Singleton() { }
public static Singleton GetInstance()
{
if (one == null)
{
lock (syncRoot)//只有一个线程能进入
{
if (one == null)
{
one = new Singleton();
}
}
}
return one;
}
public string adress = "lololo";
}
}
运行结果
饿汉式单例
sealed class SingletonH
{
static readonly SingletonH one = new SingletonH();
private SingletonH() { }
public static SingletonH GetInstance()
{
return one;
}
}
PS:单例模式分懒汉式和饿汉式,需要注意多线程的情况.
上一篇: 大话设计模式(单例模式)
下一篇: 单例模式 -- 大话设计模式