单例模式应该是 VFP 开发者最熟悉的一种设计模式。
VFP 中的系统变量 _Screen 和 _vfp 就是运行时内置的单例对象。
该模式的核心就是在一个应用程序生命周期中仅存在唯一的类实例。因此,在 VFP 中,最简单的实现方式就是在 VFP 主程序中存在类似下面的代码:
Public goSingleton
m.goSingleton = CreateObject("Custom")
但是,还有一个更好的方式:
_Screen.AddProperty("oSingleton", CreateObject("Custom"))
由于 VFP 并非现代OOP编程语言,因此,必须依据所创建的方式在类定义中予以保证所创建的类的类实例在整个应用程序周期中仅创建一个:
Define Class Singleton As Custom
*!* 属性定义
Procedure Init()
If Vartype(_Screen.oSingleton) = "O"
Return .F.
Endif
Endproc
*!* 其他事件/方法定义
Enddefine
尽管在 VFP 中该设计模式看上去比较简单,但是在 .NET 平台下,它并不像 VFP 中看上去的那样简单。