也谈单件模式
前段时间,在看《C#设计模式》(还没看完)。大致了解了下单件模式。
我就先“摘录”下书上是怎么说单件模式的:
单件模式(SINGLETON):要求一个类仅有一个实例,与此同时,提供一个全局的访问点。这意味着:一个特定的对象承担了某项职责,而其他对象必须依赖这项职责。
一般情况下,对一个单件对象进行惰性初始化,即仅当第一次使用这个对象的时候才对这个对象进行初始化。在一个单独的对象实例中,集中了这个对象实例所属类的所有权力。
以上是《C#设计模式》对单件模式的描述。
其实,我在看完书之后,一直都不大懂是什么意思,单件模式可以做什么用。只是,隐隐地知道,它的实例只能有一个。
最近,我在做的一个项目中要有用到Mdi子窗体,而且只能实例化(打开)一个。
我原来的做法是检查所有已经存在的mdi子窗体,如果它们中有需要的,那么把这个窗体BringToFront;如果没有,即还未被实例化,那么就初始化该窗体。
后来,无意间在微软的新闻组中看到有人解答: mdi程序中如何让子窗体不重复打开的问题。我就看了下,发现他就是用单件模式来“锁定”mdi子窗体只能被实例化一次;如果该实例已经存在,就不做处理;如果不存在,就new一个。
我突然豁然开朗:原来单件模式的应用可以这样地自然;原来这个就是单件模式。(当然啦,单件模式的应用肯定是要多得多,有用得多;但是,就从我这个菜鸟的角度来看,这个就是我目前要用到的单件模式)。
我就在其基础上稍作更改,应用到了我的项目中。 呵呵!
以下是他的问答,加代码:
这个问题我来回答:不一定是最适合的方法,只是方法的一种。
我是使用单例模式
窗体类是这样写的
调用
发现,其实感觉很高深的东西,实际上都有它很简单的应用。不要认为设计模式是什么高深的东西,其实就那么回事(不知道有没有说错,反正这就是我这次的体会)!
我就先“摘录”下书上是怎么说单件模式的:
单件模式(SINGLETON):要求一个类仅有一个实例,与此同时,提供一个全局的访问点。这意味着:一个特定的对象承担了某项职责,而其他对象必须依赖这项职责。
一般情况下,对一个单件对象进行惰性初始化,即仅当第一次使用这个对象的时候才对这个对象进行初始化。在一个单独的对象实例中,集中了这个对象实例所属类的所有权力。
以上是《C#设计模式》对单件模式的描述。
其实,我在看完书之后,一直都不大懂是什么意思,单件模式可以做什么用。只是,隐隐地知道,它的实例只能有一个。
最近,我在做的一个项目中要有用到Mdi子窗体,而且只能实例化(打开)一个。
我原来的做法是检查所有已经存在的mdi子窗体,如果它们中有需要的,那么把这个窗体BringToFront;如果没有,即还未被实例化,那么就初始化该窗体。
后来,无意间在微软的新闻组中看到有人解答: mdi程序中如何让子窗体不重复打开的问题。我就看了下,发现他就是用单件模式来“锁定”mdi子窗体只能被实例化一次;如果该实例已经存在,就不做处理;如果不存在,就new一个。
我突然豁然开朗:原来单件模式的应用可以这样地自然;原来这个就是单件模式。(当然啦,单件模式的应用肯定是要多得多,有用得多;但是,就从我这个菜鸟的角度来看,这个就是我目前要用到的单件模式)。
我就在其基础上稍作更改,应用到了我的项目中。 呵呵!
以下是他的问答,加代码:
这个问题我来回答:不一定是最适合的方法,只是方法的一种。
我是使用单例模式
窗体类是这样写的
public partial class Form1 : Form
{
#region 构造方法
/// <summary>
/// Form1构造方法
/// </summary>
private Form1()
{
}
#endregion
#region Form1单例模式
/// <summary>
/// Form1的单例实例
/// </summary>
private volatile static Form1 instance = null;
/// <summary>
/// 本类型的单例属性
/// </summary>
public static Form1 Instance
{
get
{
if (instance == null||instance.IsDisposed)
{
instance = new Form1();
}
return instance;
}
}
#endregion
}
{
#region 构造方法
/// <summary>
/// Form1构造方法
/// </summary>
private Form1()
{
}
#endregion
#region Form1单例模式
/// <summary>
/// Form1的单例实例
/// </summary>
private volatile static Form1 instance = null;
/// <summary>
/// 本类型的单例属性
/// </summary>
public static Form1 Instance
{
get
{
if (instance == null||instance.IsDisposed)
{
instance = new Form1();
}
return instance;
}
}
#endregion
}
调用
Form1.Instance.MdiParent = MdiForm;
Form1.Instance.Show();
Form1.Instance.Show();
发现,其实感觉很高深的东西,实际上都有它很简单的应用。不要认为设计模式是什么高深的东西,其实就那么回事(不知道有没有说错,反正这就是我这次的体会)!
![](http://www.cnblogs.com/CuteSoft_Client/CuteEditor/images/emstar.gif)