版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xml1996/article/details/84701811
单例模式
经典问题:工人多次进出工厂,怎么确定是同一个工厂里进行搬运货物?
问题原因:两次实例化同一个工厂,那么返回的工厂应该是同一个,但是得到的结果却是2个实例化的不同工厂。
改善目标:同一工厂使用多次(实例化多次),都走同一个工厂。
通常情况下我们是这些写的:
namespace 单例反例
{
class Factory
{
static void Main(string[] args)
{
//实例化2次同一个工厂
Factory工厂 s1 = new Factory工厂();
Factory工厂 s2 = new Factory工厂();
//两次实例化后的对象结果对比
if (s1 == s2) //如果相同,则说明同一工厂
{
Console.WriteLine("两个对象是相同的实例。");
}
else //如果不相同,则说明不是同一工厂
{
Console.WriteLine("两个对象是不相同的实例。");
}
Console.Read();
}
}
}
class Factor工厂
{
//构造方法 公有public
public Factor工厂()
{
}
}
返回的结果是:两个对象是不相同的实例。
class Factory
{
static void Main(string[] args)
{
Factory工厂 s1 = Factory工厂.GetInstance();
Factory工厂 s2 = Factory工厂.GetInstance();
if (s1 == s2)
{
Console.WriteLine("两个对象是相同的实例。");
}
else
{
Console.WriteLine("两个对象是不相同的实例。");
}
Console.Read();
}
}
class Factory工厂
{
private static Factory工厂 instance;
//构造方法 私有private,控制如上例子用new来创建爱你实例的可能
private Factory工厂()
{
}
//通过上面factory里的GetInstance()获得唯一的全局访问点
public static Factory工厂 GetInstance()
{
//判断,实例是否存在,如果已经存在,返回已有实例,没有在new Factory工厂()
if (instance == null)
{
instance = new Factory工厂();
}
return instance;
}
}
返回结果是:两个对象是相同的实例。
小结一下:
单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问他的全局访问点
实际应用中的例子:
【产生的问题】:在父窗体加载子窗体的时候,如果多次点击加载子窗体的Button 可能会加载多次子窗体
【解决办法】:单例模式
父窗体:引用:using System.Runtime.InteropServices;
欢迎交流指正!