C#与VisionPro联合开发——单例模式

单例模式

单例模式是一种设计模式,用于确保类只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于需要全局访问一个共享资源或状态的情况,以避免多个实例引入不必要的复杂性或资源浪费。

Form1 的代码展示

csharp 复制代码
using System;
using System.Windows.Forms;

namespace _2_单例模式 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    //单例1
    private void button1_Click(object sender, EventArgs e) {
      Class1 class1 = new Class1();
      label1.Text = class1.AddNumString();
    }

    //单例2
    private void button2_Click(object sender, EventArgs e) {
      Class2 class2 = new Class2();
      label1.Text = class2.AddNumString();
    }

    //单例3
    private void button3_Click(object sender, EventArgs e) {
      Class3 class3 = new Class3();
      label1.Text = class3.AddNumString();
    }
  }
}

Danli类的代码展示

csharp 复制代码
namespace _2_单例模式 {
  internal class Danli {
    int num = 100;
    //构造函数是私有的
    private Danli() { }
    //实例化要放到内部
    static Danli instance = null;
    static object Locker = new object();
    //提供一个获取单例的出口
    public static Danli getInstance() {
      //空的话可以实例化当前的对象,返回出去
      //上锁,确保括号内的代码正常执行
      lock (Locker) {
        if (instance == null) {
          instance = new Danli();
        }
      }
      return instance;
    }

    //封装一个方法
    public int AddNum() {
      return num++;
    }
  }
}

Class1、2、3 的代码展示

csharp 复制代码
namespace _2_单例模式 {
  internal class Class1 {
    public string AddNumString() {
      Danli danli = Danli.getInstance();
      return danli.AddNum().ToString();
    }
  }
}

单例模式和静态类的区别:

静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。

两者的区别:

1、首先单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类

就可以直接调用;

2、单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;

两者的使用场景:

首先如果你只是想使用一些工具方法,那么最好用静态类(静态类比单例类更快,因为静态的绑定是在编译期进行的)。

如果你要维护状态信息,或者访问资源时,应该选用单例模式。
还可以这样说,当你需要面向对象的能力时(比如继承、多态)时,选用单例类,当你仅仅是提供一些方法时选用静态类

相关推荐
太阳的后裔44 分钟前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo44 分钟前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
焦耳加热5 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一5 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
格林威6 小时前
机器视觉检测的光源基础知识及光源选型
人工智能·深度学习·数码相机·yolo·计算机视觉·视觉检测
lingchen19067 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
gb42152878 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
THMAIL8 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
一朵梨花压海棠go8 小时前
html+js实现表格本地筛选
开发语言·javascript·html·ecmascript