首页 > 编程语言 >无涯教程-Java - Singleton Classes函数

无涯教程-Java - Singleton Classes函数

时间:2023-12-12 19:31:36浏览次数:43  
标签:Singleton Java getInstance 无涯 static 单例 ClassicSingleton public

Singleton的目的是控制对象的创建,将对象的数量限制为一个。由于只有一个Singleton实例,因此Singleton的任何实例字段在每个类中只会出现一次,就像static 字段一样。单例通常控制对资源的访问,例如数据库连接或Socket。

例如,如果您仅对数据库的一个连接拥有许可证,或者JDBC驱动程序在多线程处理方面遇到问题,则Singleton确保仅建立一个连接或一次只能访问一个线程。

实施单例

例子1

最简单的实现包括一个私有构造函数和一个用于保存其输出的字段,以及一个名为getInstance()的static 访问器方法。

可以从static 初始化程序块中或更简单地使用初始化程序来分配私有字段。然后,getInstance()方法(必须是公共的)仅返回此实例-

//File Name: Singleton.java
public class Singleton {

   private static Singleton singleton=new Singleton( );

   /* A private Constructor prevents any other
    * class from instantiating.
    */
   private Singleton() { }

   /* Static 'instance' method */
   public static Singleton getInstance( ) {
      return singleton;
   }

   /* Other methods protected by singleton-ness */
   protected static void demoMethod( ) {
      System.out.println("demoMethod for singleton");
   }
}

这是主程序文件,我们将在其中创建一个单例对象-

//File Name: SingletonDemo.java
public class SingletonDemo {

   public static void main(String[] args) {
      Singleton tmp=Singleton.getInstance( );
      tmp.demoMethod( );
   }
}

这将产生以下输出-

输出

demoMethod for singleton

例子2

以下实现显示了经典的Singleton设计模式-

public class ClassicSingleton {

   private static ClassicSingleton instance=null;
   private ClassicSingleton() {
      //Exists only to defeat instantiation.
   }

   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance=new ClassicSingleton();
      }
      return instance;
   }
}

ClassicSingleton类维护对单个单例实例的static 引用,并从static getInstance()方法返回该引用。

在这里,ClassicSingleton类采用了一种称为惰性实例化的技术来创建单例。输出,直到第一次调用getInstance()方法时,才创建单例实例。此技术可确保仅在需要时才创建单例实例。

参考链接

https://www.learnfk.com/java/java-using-singleton.html

标签:Singleton,Java,getInstance,无涯,static,单例,ClassicSingleton,public
From: https://blog.51cto.com/u_14033984/8790433

相关文章

  • java文件的上传与下载
    1、文件上传下载1.1文件上传什么是文件上传?要将客户端(浏览器)大数据存储到服务器端,不将数据直接存储到数据库中,而是要将数据存储到服务器所在的磁盘上,这就要使用文件上传。为什么使用文件上传?通过文件上传,可以将浏览器端的大数据直接保存到服务器端。不将数据保存到数据库中......
  • 无涯教程-MFC - List Control函数
    列表视图控件的功能,该控件显示项目的集合,每个项目由一个图标和一个标签组成,它由CListCtrl类表示,列表控件包括使用以下视图显示项目列表。IconsSmallIconsListReport让无涯教程通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例。步骤1-删除TODO行并拖动一......
  • Java Spring Boot 拦截器的使用小结
    很多时候,我们在开发项目中,总是希望在接口中,尽量进行业务处理,其余的事项交给其他组件来处理,比如:登录验证日志记录接口性能在SpringBoot中,正如大多数框架一样,可以用到拦截件进行处理,不管叫中间件还是拦截件,总之都是为了让我们更好的专注于业务,解耦功能。我们看看SpringB......
  • 无涯教程-MFC - Tree Control函数
    TreeViewControl是一个窗口,其中显示项目的层次结构列表,例如文档中的标题,索引中的条目或磁盘上的文件和目录,每个项目都包含一个标签和一个可选的位图图像,并且每个项目都可以具有与其相关联的子项目列表,通过单击一个项目,用户可以展开和折叠子项目的关联列表,它由CTreeCtrl类表......
  • 《Effective Java》阅读笔记-第五章
    EffectiveJava阅读笔记第五章泛型第26条不要使用原生类型随着泛型的普及,这条没什么可说的。如果不知道具体类型,可以使用<?>来代替。第27条消除unchecked警告原生类型到泛型转换时,编译会有警告,可以使用@SuppressWarnings("unchecked")来消除警告。并且应该在尽可......
  • 秦疆的Java课程笔记:65 面向对象 创建对象内存分析
    先写两个类//创建一个Pet类==============================packageOOP.demo;publicclassPet{publicStringname;publicintage;publicvoidshout(){System.out.println("喵~~");}}//主程序Application================......
  • java计算二个经纬度间的距离(百度坐标)
    1:背景工作中遇到计算二个地点之间的距离,根据百度经纬度进行计算。2:maven依赖<dependency><groupId>org.gavaghan</groupId><artifactId>geodesy</artifactId><version>1.1.3</version></dependency>3:代码实现packagecom.pacific.transfe......
  • 零基础30天学会Java-韩顺平
    第一章概述了解了该视频课程的大纲和Java的基本知识,Java1995年推出,目前稳定维护的有Java8和Java11版本。JVM(Java虚拟机):JVM包含于JDK中,Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行"JRE(Java运行环境):JRE=JVM+Java的核心类库。JDK(Java开发工具包):JDK=JRE+Jav......
  • Java-04数组
    tip:[start]程序=逻辑+数据,数组是存储数据的强而有力的手段。——闫学灿tip:[end]一维数组数组的定义数组的定义方式和变量类似。java中数组的定义[]是写在数组名前面(与c++区分),开辟长度需要new,即面向对象。publicclassMain{publicstaticvoidmain(String[]......
  • java异常
    一、概述 二、JVM对异常的处理方案 三、异常处理1、try..catch 示例: 2、Throwable  3、throws  示例:  四、编译时异常和运行时异常区别示例:  五、自定义异常 六、throws和throw ......