WinForm实现窗体跳转,设计模式之单例模式

以下方法的优势:

  1. 节约资源:单例模式确保每种窗体只被实例化一次,避免了重复创建和销毁窗体所带来的性能开销。
  2. 全局访问:单例模式提供了一个全局访问点,便于在应用程序的不同部分访问同一实例。
  3. 线程安全:通过使用 lock 语句,确保了在多线程环境下对窗体实例的安全访问。
  4. 代码管理:由于使用了泛型类,可以将窗体管理逻辑集中在一个地方,使代码更简洁,易于维护和扩展。
  5. 用户体验:通过复用已有窗体,用户可以在不同的操作之间快速切换,避免了频繁的窗体加载和初始化,提高了应用程序的响应速度和流畅度
  6. 可扩展性:这个设计模式为未来的扩展提供了良好的基础。如果以后需要支持更多的窗体,只需继承 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窗体为例)

cs 复制代码
 private void login_btn_Click(object sender, EventArgs e)
 {
     //获取单例实例
     Home home = SingletonForm<Home>.Instance;
     //检测窗体是否被释放
     if (home.IsDisposed)
     {
         home = new Home();
     }
     //显示窗体
     home.Show();
     //确保打开的窗体在最高层级
     home.BringToFront();
 }
相关推荐
bigbread10 小时前
策略模式 + 工厂方法模式在项目中的实战应用
设计模式
用户7884773163411 小时前
用 C# 把每周 6 小时的 PDF 录入干到 20 分钟:一份可复制的桌面 OCR 方案
c#
高晶11 小时前
C 语言实现 BMS 系统中 SPI 通信协议实战指南
设计模式·程序员
代钦塔拉11 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
高晶12 小时前
2A3 单端甲类功放从零制作全攻略:电路设计、焊接调试到煲机维护一站式指南
前端·设计模式
csdn_aspnet13 小时前
C# .NetCore Swagger ISchemaFilter 处理枚举、特殊类型
c#·.netcore·swagger
滴滴答答哒13 小时前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#
代钦塔拉15 小时前
【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
c++·qt·设计模式
博风17 小时前
11、设计模式应用举例:迭代器模式:使用多个集合存储对象
设计模式·迭代器模式
code_long17 小时前
.net core 连接打印机 使用zpl指令打印机,并且位图本地渲染zpl指令
c#·.netcore·位图·打印机·模板编辑·模板预览