我刚刚对谷歌进行了一些研究,但我没有找到我的问题的答案。 有没有办法在运行时获取活动对象(类的实例)的列表?
在我的应用程序中,我需要有单个实例类,需要由不同的运行形式使用,但如果我以A形式创建实例,那么我是否可以控制B形式的同一个实例?
谢谢
答案 0 :(得分:3)
实际上,你的问题有两个部分:
1.如何创建单实例对象
2.如何从不同的形式访问相同的对象。
幸运的是,在一个简单而通用的设计模式Singleton中,可以解决这两个问题 以Singleton模式编写的类只能有一个实例,正如您将要看到的那样,作为副作用,可以通过整个应用程序访问此实例。
使用单例设计模式的最简单方法是:
Public class SingletonClass
private Shared _instance As SingletonClass
Public Shared Function GetSingletonClass() As SingletonClass
If isNothing(_instance) Then
_instance = new SingletonClass()
End If
Return _instance
End Function
private sub New()
'' Create the instance here
end sub
End Class
正如您所看到的,由于构造函数是私有的,因此无法从类SingletonClass之外的任何位置访问它,并且由于类SingletonClass包含对其实例的静态引用,这意味着每次编写SingletonClass.GetSingletonClass()时都是如此。您的应用程序获得相同的实例。
这种设计模式以简单,优雅和众所周知的架构解决了您的两个问题。
<强>更新强>
我最近读过grate article about different ways to implement singleton patterns。事实证明,这个特定的实现并不是那么好,因为它不是线程安全的。本文中的代码示例是c#,但将它们更改为VB.Net应该非常容易。如果您使用的是.Net 4或更高版本,我建议使用第6版 - 使用.NET 4的Lazy类型。 它既是线程安全的又是延迟加载,我写的实现没有2个优点。