单例模式确保某对象只能实例化一次,因此可以确保程序中所有对象访问同一个对象,但是也存在一个弊端,如,不能解决删除单个对象的问题等,因为缺少实际的开发运用,对性能以及单例的优缺点就不会太明白,这里重点总结一下单例模式的5种拓展实现。
原文详见:http://www.cnblogs.com/psunny/archive/2010/06/18/1760133.html
1 、单例模式的简单实现:(这种方式创建是线程不安全的)
Public NotInheritable Class UserDataReaderToEntityStrategy
Shared singleInstance As UserDataReaderToEntityStrategy = Nothing
'私有化构造函数
Private Sub New()
End Sub
'创建静态方法,用于取得全局唯一实例
Public Shared ReadOnly Property GetInstance() As UserDataReaderToEntityStrategy
Get
If singleInstance Is Nothing Then
singleInstance = New UserDataReaderToEntityStrategy
End If
Return singleInstance
End Get
End Property
End Class
2、安全线程的实现
Public NotInheritable Class UserDataReaderToEntityStrategy
Shared singleInstance As UserDataReaderToEntityStrategy = Nothing
Shared ReadOnly padlock As New Object()
'私有化构造函数
Private Sub New()
End Sub
Public Shared ReadOnly Property GetInstance() As UserDataReaderToEntityStrategy
Get
'这里添加一个锁,保证了线程的安全
SyncLock padlock
If singleInstance Is Nothing Then
singleInstance = New UserDataReaderToEntityStrategy
End If
End SyncLock
Return singleInstance
End Get
End Property
End Class
3、双重锁定
Public NotInheritable Class UserDataReaderToEntityStrategy
Shared singleInstance As UserDataReaderToEntityStrategy = Nothing
Shared ReadOnly padlock As New Object()
'私有化构造函数
Private Sub New()
End Sub
Public Shared ReadOnly Property GetInstance() As UserDataReaderToEntityStrategy
Get
'这里添加一个锁,保证了线程的安全
If singleInstance Is Nothing Then
SyncLock padlock
If singleInstance Is Nothing Then
singleInstance = New UserDataReaderToEntityStrategy
End If
End SyncLock
End If
Return singleInstance
End Get
End Property
End Class
4、静态初始化(首选方式)
Public NotInheritable Class UserDataReaderToEntityStrategy
Shared singleInstance As UserDataReaderToEntityStrategy = Nothing
Shared Sub New()
End Sub
'私有化构造函数
Private Sub New()
End Sub
Public Shared ReadOnly Property GetInstance() As UserDataReaderToEntityStrategy
Get
Return singleInstance
End Get
End Property
End Class
5、延迟初始化(比较常用)
Public NotInheritable Class UserDataReaderToEntityStrategy
Shared singleInstance As UserDataReaderToEntityStrategy = Nothing
'私有化构造函数
Private Sub New()
End Sub
Public Shared ReadOnly Property GetInstance() As UserDataReaderToEntityStrategy
Get
Return Nested.singleInstance
End Get
End Property
Private Class Nested
Shared Sub New()
End Sub
Friend Shared ReadOnly singleInstance As New UserDataReaderToEntityStrategy()
End Class
End Class
作者:
Sunny Peng