“四人帮”的23个模式中,单态模式应该是比较常用的,在实际开发中,经常使用在系统相对不变的地方,比如与数据库的连接串、基本配置等地方。几年前曾经做过服务的开发,系统需要提供7个Windows服务,基本配置写在一个XML文件中,7个服务使用同样的配置,这种情况下,就应该使用单态模式,考虑到有时会修改配置文件,就需要能够根据修改后的配置自动使用新的配置。
这个类的结构大概如下:
类Setup是基本配置,SingleSetup就是我们讨论的单态类,私有变量_setup就是Setup类型。Setup里的成员就是配置信息,具体信息在SingleSetup的initSetup中进行设置。
类SingleSetup的具体代码结构如下:
Public Class SingleSetup
Private Shared _Setup As Setup ‘配置信息
Private Shared _Mutex As New System.Threading.Mutex '同步基元也可用于进程间同步
Private Shared _LastModyTime As DateTime ‘最后修改日期
‘关键,构造函数为私有的,确保只有一个实例运作
Private Sub New()
Dim FileName As String =……’此处是配置文件,这里是使用硬编码方式,其实可以通过一个属性传入
_LastModyTime = System.IO.File.GetLastWriteTime(FileName)
initSetup(FileName)
End Sub
Private Sub initSetup(ByVal FileName As String)
…… ‘此处读取配置文件,为_setup的各个属性赋值
End Sub
‘对外的接口,使用这个方法返回系统配置
Public Shared Function GetInstance() As Setup
Dim FileName As String = ……
Try
‘如果_Setup尚没有初始化或者配置文件已经修改,就重新对_Setup进行配置
If _Setup Is Nothing Or System.IO.File.GetLastWriteTime(FileName) <> _LastModyTime Then
_Setup = New Setup
End If
Catch
……
Finally
……
End Try
Return _Setup
End Function
End Class
单态模式简单易用,在处理此类问题的时候,确实是一种简洁高效并且充满美感的方案。