以下方法的优势:
- 节约资源:单例模式确保每种窗体只被实例化一次,避免了重复创建和销毁窗体所带来的性能开销。
- 全局访问:单例模式提供了一个全局访问点,便于在应用程序的不同部分访问同一实例。
- 线程安全:通过使用
lock
语句,确保了在多线程环境下对窗体实例的安全访问。 - 代码管理:由于使用了泛型类,可以将窗体管理逻辑集中在一个地方,使代码更简洁,易于维护和扩展。
- 用户体验:通过复用已有窗体,用户可以在不同的操作之间快速切换,避免了频繁的窗体加载和初始化,提高了应用程序的响应速度和流畅度
- 可扩展性:这个设计模式为未来的扩展提供了良好的基础。如果以后需要支持更多的窗体,只需继承
SingletonForm<T>
类。
一、创建SingletonForm<T>泛型类
cs//创建一个单例类,用于创建和管理窗体的唯一实例 public class SingletonForm<T> where T : Form, new()//泛型类 接收任意类型 条件是必须是Form类型和一个无参数的构造函数 { //存储窗体的唯一实例 private static T _instance; //锁 用于确保线程安全 private static readonly object _lcok = new object(); //属性 用于获取窗体的唯一实例 public static T Instance { get { lock (_lcok) { //判断窗体是否为空或者是否被释放 释放或为空则再初始化 不为空直接返回此窗体 if (_instance == null || _instance.IsDisposed) { _instance = new T(); } return _instance; } } } }
二、使用单例模式实现创建和跳转窗体(以button按钮控件的点击事件跳转Home窗体为例)
csprivate void login_btn_Click(object sender, EventArgs e) { //获取单例实例 Home home = SingletonForm<Home>.Instance; //检测窗体是否被释放 if (home.IsDisposed) { home = new Home(); } //显示窗体 home.Show(); //确保打开的窗体在最高层级 home.BringToFront(); }