单例模式

单例(Singleton)模式是设计模式之一,最显著的特点就是一个类在一个JVM中只有一个实例,避免繁琐的创建销毁实例。

简单例子

先看简单的单例模式实现完整代码:

Singleton_Test类使用单例模式 ,采用饿汉式方法。

public class Singleton_Test {

private Singleton_Test() {

System.out.println("私有化构造方法");

}

//饿汉式

private static Singleton_Test Instance = new Singleton_Test();

public static Singleton_Test getInstance() {

return Instance;

}

}

再编写一个测试类Main

public class Main {

public static void main(String args[]) {

Singleton_Test test1 = Singleton_Test.getInstance();

Singleton_Test test2 = Singleton_Test.getInstance();

System.out.println(test1 == test2);

/**

运行结果:

私有化构造方法

true

*/

}

}

逐步分析

1.构造方法私有化

首先,实现单例模式的类,构造方法私有化(private),外部无法实例化(new)该类。

public class Singleton_Test {

private Singleton_Test(){

System.out.println("私有化构造方法");

}

}

无法实例化 Singleton_Test 类。

2.私有静态类属性指向实例

所以需要提供一个public static 方法 getInstance(),外部通过这个方法获取对象,并且由于是 实例化的同一个类,所以外部每次调用都是调用同一个方法,从而实现一个类只有一个实例。

private static Singleton_Test Instance = new Singleton_Test();

//饿汉式

private static Singleton_Test Instance ;

//懒汉式

3.使用公有静态方法返回实例

返回的都是同一个类,保证只实例化唯一一个类

public static Singleton_Test getInstance(){

return Instance;

}

4.测试类

public static void main(String args[]) {

Singleton_Test test1 = Singleton_Test.getInstance();

Singleton_Test test2 = Singleton_Test.getInstance();

System.out.println(test1 == test2);

/**

运行结果:

私有化构造方法

true

*/

}

输出结果表示,实例化的是同一个类,并只调用一次构造方法。

单例模式的实现

饿汉式

这种方式无论是否调用,加载时都会创建一个实例。

private static Singleton_Test Instance = new Singleton_Test();

public static Singleton_Test getInstance(){

return Instance;

}

懒汉式

这种方式,是暂时不实例化,在第一次调用发现为null没有指向时,再实例化一个对象。

private static Singleton_Test Instance ;

public static Singleton_Test getInstance(){

if (Instance == null){

Instance = new Singleton_Test();

}

return Instance;

}

区别

饿汉式的话是声明并创建对象(他饿),懒汉式的话只是声明对象(他懒),在调用该类的 getInstance() 方法时才会进行 new对象。

饿汉式立即加载,会浪费内存,懒汉式延迟加载,需要考虑线程安全问题 什么是线程安全/不安全

饿汉式基于 classloader 机制,天生实现线程安全,懒汉式是线程不安全。需要加锁 (synchronized)校验等保证单例,会影响效率

总结

构造方法私有化

private Singleton_Test(){}

私有静态(static)类属性指向实例

private static Singleton_Test Instance

使用公有静态方法返回实例

public static Singleton_Test getInstance(){ return Instance;}

java领单_Java-单例模式相关推荐

  1. java伪代码生成器_JAVA单例模式的实现伪代码

    什么是单例?:其定义是单例对象的类只能允许一个实例存在 单例的实现基本原理:1.将该类的构造方法定义为私有访问,不对外暴露从而使其他类不能实例化该类对象,只能通过该类的静态方法得到该类的唯一实例 2. ...

  2. java 表单_Java报表表单设计之表单样式设计

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  3. java 结构体_Java实现单链表的简单操作

    文章目录 前言 一.基本实现思路 二.代码实现 1.定义结点类2.定义链表类3.测试调用4.结果 总结 前言 用Java实现单链表的简单操作,阅读本文和上一篇文章体会Java中类与C++中结构体指针的 ...

  4. java 链表逆转_java 实现单链表逆转详解及实例代码

    java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = nam ...

  5. 【Java设计模式】GOF32 - 单例模式

    思维和思考的方式才是最重要的,语言只是一种工具. GOF23 Group of Four--国外的四个软件大牛总结出来的模式. 创建型模式:帮助我们创建对象 单例模式 单例模式的常见使用场景: 单例模 ...

  6. java 多线程的单例模式,Java多线程中的单例模式两种实现方式

    Java多线程中的单例模式 一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { priv ...

  7. java面试 设计模式_Java面试中常问到的设计模式

    面试中常问到的设计模式 什么是设计模式? ​设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法.设计模式是代码可用性的延伸 单例模式 ​保证被创建一次,节省系统开销 ​饿汉式:上来不 ...

  8. Java读书笔记(8)-单例模式

    Java读书笔记(8)-单例模式 今天在阅读<Effective Java 2>第3条时,获知一种使用枚举enum实现单例模式的新方法,然而书上并没有就此展开深入说明,于是上网查阅了一些资 ...

  9. Java与Kotlin的单例模式(霸气.jpg)

    题外话 上一次被人说文章名字取得不霸气,于是这一次我采用了这么霸气的名字,但实际上我是一个很低调的人.设计模式刚入门的小伙伴可以先看看这篇<设计模式入门>,在文章末尾也将列出"设 ...

最新文章

  1. 2011年3月华章新书书讯:ASP.NET本质论、Erlang编程指南、SNS网站构建
  2. 源码分析shiro认证授权流程
  3. 无线覆盖项目地勘——无线地勘记录
  4. 配置MYSQL远程连接
  5. .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  6. html5 css svg,6款基于SVG的HTML5CSS3应用和动画
  7. linux 命令 which whereis whatis locate find
  8. 软件工程汇编程序设计——分支程序实验,循环程序实验,综合程序设计实验
  9. Unity5 VS UE4
  10. Java程序设计语言基础01:绪论
  11. html 空行_一篇文章学习html「经典案例」
  12. 5、Spring Cloud-声明式调用 Feign(下)
  13. java 格式化字符串
  14. 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)...
  15. BZOJ2768: [JLOI2010]冠军调查
  16. 前端学习总结【103天】:CSS——不用JavaScript实现tab标签切换的两种方法
  17. Linux 常用函数
  18. springboot获取active_springboot 2.3.0+activeRecord获取对象报类型转换错误
  19. 半导体器件制造封装材料和生产工艺流程(图文介绍)
  20. 坚守13年的极飞,终靠“务农”拿下12亿融资!专访彭斌:要为行业找技术,而不是为技术找行业...

热门文章

  1. C# Datatable排序与取前几行数据
  2. 快速学习者的高效学习策略
  3. kali中wireshark打开后错误
  4. padding与margin的差别
  5. spring入门:beans.xml不提示、别名、创建对象的三种方式
  6. PHP如何添加变量 $_SERVER
  7. ASP.NET中常用功能代码总结(3)——上传图片到数据库
  8. 【zTree】基于zTree动态生成树节点的一些应用
  9. 【maven install报错】Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war
  10. Android之Handler用法总结(1)