当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Singleton深入浅出

ASP.NET
ASP.NET立即上手教程(13)
ASP.NET立即上手教程(14)
Repeater控件分页例子
从文本文件读取行信息
Asp.Net 2.0数据库基本操作方法学习
url传递中文的解决方案
如何实现无刷新的DropdownList联动效果
将非模态对话框显示为模态对话框
微软新版开发工具VS 2008 beta2功能定案
c#.net函数列表
.Net FW中无法正确显示中文问题
ASP.NET中的doPostBack脚本函数实例
教你在asp.net中动态变更CSS
一个功能齐全的DataGrid分页例子
在ASP.NET程序中创建唯一序号
asp.net 2.0中用GRIDVIEW插入新记录
ASP.Net中保护自定义的服务器控件
在ASP.NET中跨页面实现多选
转换DataSet到普通xml的新法
ASP.NET中用healthMonitor属性用法

ASP.NET 中的 Singleton深入浅出


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 44 ::
收藏到网摘: n/a


上次我们简单介绍了静态成员,今天再延伸一下,看看设计模式中的单件模式(Singleton),我先照搬一些理论 Singleton-对象创建型模式意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。动机:对于一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印假脱机(printer spooler),只应该有一个文件系统合一个窗口管理器。 适用性1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。2. 当这个唯一实例应该时通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。优点1.对唯一实例的受控访问2.缩小名空间3.允许对操作和表示的精化4.允许可变数目的实例5.比类操作更灵活好了,看了这么多理论,厌倦了吧,下面我们看一些实例代码,典型的 Singleton 类如下
class Singleton{ public static Singleton Instance() = new Singleton();}Class Singleton Public Shared Instance As Singleton = New SingletonEnd ClassC# VB 呵呵,够简单吧,当然实际应用时要复杂的多。回顾上面的理论,你可能已经注意到意图已经实现:通过 Singleton.Instance 我们已经有了访问它的全局访问点,静态成员Instance将返回类的唯一一个实例
可是实际中如何运用呢?据个例子,我们现在要做一个游戏,而游戏中需要加载一些Sprite,这些Sprite来自于一些bmp资源,为了提升性能并使程序中只有一个实例,这时我们考虑使用Singleton模式
class Sprites{ /// /// Public field giving access the the instance of the Sprites class. /// public static readonly Sprites Instance = new Sprites(); public Bitmap[] Tiles; /// /// Private variable indicating if the sprites are loaded or not. /// private bool doneLoading; /// /// Method loading the sprites from the assembly resource files /// into the public bitmap array. To be sure the sprites are only loaded /// once a private bool is set to true/false indicating if the sprites /// have been loaded or not. /// public void LoadSprites() { if(!doneLoading) { Assembly asm = Assembly.GetExecutingAssembly(); Bitmap tiles = new Bitmap(asm.GetManifestResourceStream("game.Data.Sprites.Tiles.bmp")); //Parse the sprite strips into bitmap arrays. Tiles = ParseSpriteStrip(tiles); tiles.Dispose(); doneLoading = true; } } /// /// The constructor is made private to ensure that /// the class cannot be explicitly created /// private Sprites() { }}Class Sprites '*********************************** ' Public field giving access the the instance of the Sprites class. '*********************************** Public Shared ReadOnly Instance As Sprites = New Sprites Public Tiles As Bitmap() '*********************************** ' Private variable indicating if the sprites are loaded or not. '*********************************** Private doneLoading As Boolean '*********************************** ' Method loading the sprites from the assembly resource files ' into the public bitmap array. To be sure the sprites are only loaded ' once a private bool is set to true/false indicating if the sprites ' have been loaded or not. '*********************************** Public Sub LoadSprites() If Not Me.doneLoading Then Dim asm As Assembly = Assembly.GetExecutingAssembly Dim tiles As New Bitmap(asm.GetManifestResourceStream("game.Data.Sprites.Tiles.bmp")) 'Parse the sprite strips into bitmap arrays. Tiles = ParseSpriteStrip(tiles) tiles.Dispose Me.doneLoading = True End If End Sub '*********************************** ' The constructor is made private to ensure that ' the class cannot be explicitly created '*********************************** Private Sub New() End Sub End ClassC# VB

方法的调用 Sprites.Instance.LoadSprites()
小节:通过Singleton,我们可以方便的使用类的实例方法,同时保证类的实例的唯一性。