Silverlight的弹出窗口--设计
2009-02-25 11:56:37 来源:WEB开发网核心提示: 为了保证PopupService的伪单例的特性,必须将生成的对象保存起来,Silverlight的弹出窗口--设计(3),这里简单地用到了Dictionary进行保存,当调用GetServiceFor方法时,起到解耦的作用,尽可能地减少PopupService的负担,首先在缓存池中寻找,如
为了保证PopupService的伪单例的特性,必须将生成的对象保存起来,这里简单地用到了Dictionary进行保存,当调用GetServiceFor方法时,首先在缓存池中寻找,如果找不到则调用new进行实例化,随后放入缓存池中进行持久的保存,以保证日后不会再发生重新构造的问题,其具体代码如下:
public static PopupService GetServiceFor(Panel owner)
{
if (!Cache.ContainsKey(owner))
{
PopupService service = new PopupService(owner);
Cache[owner] = service;
}
return Cache[owner];
}
在这里并没有显式地对Cache对象(Dictionary<Panel, PopupService>类型)进行线程锁,这是因为Silverlight与Winform类似,所有对UI的操作只能在主线程进行,因此我认为没有必要在一个单线程执行的环境中进行加锁。
上面讲了PopupService的产生过程,下面例举一下PopupService提供的方法,由于方法十分简单,就不展开讨论,其方法主要有3个:
1. GetBoxPage:获取在此PopupService管理下的BoxPage的一个对象,有重载
2. GetMessagePage:获取在此PopupService管理下的MessagePage的一个对象,有重载
3. RegisterPopupBox:对已经创建好的但没有纳入PopupService管理的PopupBox对象进行注册,注册后的对象将由此PopupService进行管理,即分配一个LayoutMask
LayoutMask
LayoutMask听起来就叫“遮罩层”,但其实他不是一个控件,其地位类似于PopupService,是一个“管理者”的角色,他将管理多个PopupBox,从而将弹出窗口于PopupService分享开来,起到解耦的作用,尽可能地减少PopupService的负担,从而使程序结构更加清晰。
Tags:Silverlight 窗口 设计
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接