学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
发新话题
打印

Singleton 单件创建模式

Singleton 单件创建模式

复制内容到剪贴板
代码:
'Singleton模式:一个类只会创建一个实例。
Module Module1

    Sub Main()
        Dim In1 As Singleton = Singleton.Intance
        In1.Name = "李小龙"
        Dim In2 As Singleton = Singleton.Intance

        System.Console.WriteLine(Object.ReferenceEquals(In1, In2) = True)
        System.Console.WriteLine(In1.Name)
        System.Console.WriteLine(In2.Name)
        System.Console.ReadLine()

    End Sub

End Module

Public Class Singleton

    Private Shared m_Intance As Singleton
    Private Shared m_Mutex As New System.Threading.Mutex '同步基元也可用于进程间同步
    Private m_Name As String
    Private Sub New()

    End Sub

    Public Shared Function Intance() As Singleton
        m_Mutex.WaitOne() '当在派生类中重写时,阻塞当前线程,直到当前的 System.Threading.WaitHandle 收到信号

        Try
            If m_Intance Is Nothing Then
                m_Intance = New Singleton   '释放 System.Threading.Mutex 一次
            End If
        Finally
            m_Mutex.ReleaseMutex()
        End Try
        Return m_Intance
    End Function

    Public Property Name() As String
        Get
            Return Me.m_Name
        End Get
        Set(ByVal value As String)
            Me.m_Name = value
        End Set
    End Property
End Class

TOP

更简单的实现(缺点:不支持带参构造函数)
复制内容到剪贴板
代码:
'Singleton模式:一个类只会创建一个实例。
Module Module1

    Sub Main()
        Dim In1 As Singleton = Singleton.Intance
        In1.Name = "李小龙"
        Dim In2 As Singleton = Singleton.Intance
        System.Console.WriteLine(Object.ReferenceEquals(In1, In2) = True)
        System.Console.WriteLine(In1.Name)
        System.Console.WriteLine(In2.Name)
        System.Console.ReadLine()

    End Sub

End Module

Public Class Singleton
    Private m_Name As String
    Public Shared ReadOnly Intance As New Singleton
    Private Sub New()

    End Sub

   

    Public Property Name() As String
        Get
            Return Me.m_Name
        End Get
        Set(ByVal value As String)
            Me.m_Name = value
        End Set
    End Property
End Class
承接c/s物料需求计划(MRP)系统开发.有意者请至:
Email:ioriliao@tom.com
电话:13690291014 --太极工作室 编程大杂烩群:31504712

TOP

Singleton模式扩展思想:从一个实例扩展到n个实例,例如对象池的实现.
Singleton模式核心思想:如果控制用户使用New对一个类的实例构造器的
任意调用

[ 本帖最后由 ioriliao 于 2008-2-18 11:32 编辑 ]
承接c/s物料需求计划(MRP)系统开发.有意者请至:
Email:ioriliao@tom.com
电话:13690291014 --太极工作室 编程大杂烩群:31504712

TOP

.Net 框架中singleton模式的应用
一个简单的例子
复制内容到剪贴板
代码:
Dim cl1 As New MyClasses
        Dim cl2 As New MyClasses

        Dim ct1 As Type
        Dim ct2 As Type
        '错误写法 Dim ct3 As New .... 你将会看到 加上New关键字后,vb.net智能感知将不会感知到Type
        '可知Type类是singleton模式的.

        ct1 = cl1.GetType
        ct2 = cl1.GetType

Public Class MyClasses

End Class
承接c/s物料需求计划(MRP)系统开发.有意者请至:
Email:ioriliao@tom.com
电话:13690291014 --太极工作室 编程大杂烩群:31504712

TOP

发新话题