首先向关注过我这个系列的同修们说声 对不起
昨天朋友孩子满月,去喝酒喝挂了,回家本想小睡一会又起来写代码,一不小心醒来就是今天早上了。
真是非常抱歉,为了符合原计划及帖子标题,这个帖子是补发昨天的,今天的晚一点贴上。
昨天在论坛看到有人提出MDI界面中控制子窗体不要重复显示的问题
这立刻让我想到了最常用也是最简单最容易理解的一个设计模式 单例模式
何为 单例模式 ?
故名思议 即 让 类 永远都只能有一个实例。
由于 示例代码 比较简单 我也加了注释,这里就不在赘述
以下是通过 单例模式 实现的控制mdi子窗体实例化的代码
mdi父窗体
[code=C#]
namespace 单例模式
{
public partial class frmMdiParent : Form
{
public frmMdiParent()
{
InitializeComponent();
}
private void mnuItemOpenMdiChildren_Click(object sender, EventArgs e)
{
//客户代码,只需要管调用,不需要管实现,符合封闭-开放原则
frmChildren.GetInstance().Show();
}
}
}
[/code]
mdi子窗体
[code=C#]namespace 单例模式
{
public partial class frmChildren : Form
{
private frmChildren()
{
InitializeComponent();
}
//声明一个静态的自己类型的变量
private static frmChildren _objFrmChildren = null;
//构造方法改为私有,使外部代码无法通过 new 来实例化
private void frmChildren_Load(object sender, EventArgs e)
{
}
//外部代码通过这个方法来获取 类 的实例 以代替类构造函数功能
public static frmChildren GetInstance()
{
//判断实例是否存在,不存在则调用构造方法
if (_objFrmChildren == null || _objFrmChildren.IsDisposed)
{
_objFrmChildren = new frmChildren();
_objFrmChildren.MdiParent = frmMdiParent.ActiveForm;
}
return _objFrmChildren;
}
}
}[/code]