Java 单列模式(Singleton)
单例模式(Singleton)
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
目的:使得类的一个对象成为系统中的唯一实例。
如何保证一个类只有一个实例并且这个实例易于被访问呢?
我们都知道,一个类多次被new 创建后,获取的是不同实例。
创建一个类 public class NewObject {} 测试 public class NewOne {public static void main(String[] args) {NewObject no1= new NewObject();NewObject no2= new NewObject();System.out.println("no1--->"+no1);System.out.println("no2--->"+no2);} }
控制台输出的是:
由此可知:要想产生单个实例就得:让类自身负责保存它的唯一实例,这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。
- 单例模式的类只提供私有的构造函数
- 类定义中含有一个该类的静态私有对象
- 提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
一般Singleton有是三种模式:懒汉式(最常用)、饿汉式、 双重锁
懒汉式:
public class Singleton {/* * 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例 */ // 1.一个私有的指向自己的静态变量 private static Singleton instance; // 2.私有的构造方法,保证不能从外部创建对象 private Singleton(){} // 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化) public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); System.out.println("创建Singleton类的实例"); }else { System.out.println("实例已经创建,不能再创建"); } return instance; } }
public class Test {public static void main(String[] args) { Singleton s = Singleton.getInstance(); System.out.println("第一次---->"+s); System.out.println("第二次---->"+Singleton.getInstance()); System.out.println("第三次---->"+Singleton.getInstance()); } }
饿汉式:
public class Singleton2 { /* * 恶汉单例模式:在类加载的时候就创建一个单例模式. */ // 1.私有的构造函数,确保不能在类的外部访问该类的构造函数 private Singleton2(){ System.out.println("构造函数执行了"); } // 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象 private final static Singleton2 instance = new Singleton2(); // 3.公开的静态工厂返回此类的唯一实例 public static Singleton2 getInstance(){ return instance; } }
public class Test {public static void main(String[] args) { Singleton2 s1 = Singleton2.getInstance(); System.out.println(s1); System.out.println(Singleton2.getInstance()); System.out.println(Singleton2.getInstance()); } }
双重锁
package com.单列模式;public class Singleton3 {private static Singleton3 instance=null;private Singleton3(){System.out.println("构造函数开始!");}public static synchronized Singleton3 getInstance(){if(instance==null){synchronized(Singleton3.class){if(instance==null){instance=new Singleton3();}}}return instance;} }
public class Test {public static void main(String[] args) { Singleton3 s3 =Singleton3.getInstance();System.out.println(s3);System.out.println(Singleton3.getInstance());System.out.println(Singleton3.getInstance());} }
谢谢大家的关注。小弟才疏学浅,更新的很慢,但我会把自己学的倾囊相授。人生两大悲剧:一是万念俱灰,一是踌躇满志。
转载于:https://www.cnblogs.com/hxb2016/p/6125023.html
Java 单列模式(Singleton)相关推荐
- java单列模式---双重检校性--举哥
1 public class Singleton { //定义一个静态的单列属性 2 private volatile static Singleton singleton; //默认的构造方 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /*** 功能:单列模式* @author Administrator**/ public class SingletonTest {public static v ...
- Java入门之初识设计模式---单列模式
设计模式 是软件开发人员在软件开发过程中面临的一般问题的解决方案 单例模式 目的:使得类的一个对象成为该类系统中的唯一实例 定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供 因此,设计要点是 ...
- 《JAVA与模式》之单例模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述单例模式的: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的 ...
- singleton 类_在Java中对Singleton类进行双重检查锁定
singleton 类 Singleton类在Java开发人员中非常常见,但是它给初级开发人员带来了许多挑战. 他们面临的主要挑战之一是如何使Singleton保持为Singleton? 也就是说,无 ...
- 在Java中对Singleton类进行双重检查锁定
Singleton类在Java开发人员中非常常见,但是它给初级开发人员带来了许多挑战. 他们面临的主要挑战之一是如何使Singleton保持为Singleton? 也就是说,无论出于何种原因,如何防止 ...
- 一枝看上去很美的花——书评《Java与模式》
一枝看上去很美的花 --书评<Java与模式> 撰文/剃刀 (本文首发于<程序员>杂志2003年第1期) 躺在我面前的,是阎宏博士编著.电子工业出版社出版的厚达1024页的&l ...
- 单例/单体模式(Singleton)
单例/单体模式(Singleton) 首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向 ...
- [转载]我的《java与模式》读书笔记
我的<java与模式>读书笔记 中国是一个含蓄的民族,处对象一般都得通过一个介绍人. 这是一本阐述微观设计的书,而不是阐述宏观设计的书. <Java与模式>首先阐述了代码的设计 ...
最新文章
- 预告丨2018年值得关注的200场机器学习会议
- RTMP 流媒体系统协议 简介
- python中的浮点数用法_如何利用Python在运算后得到浮点数值的方法详解
- 机器学习中的基本数学知识
- Libra教程之:move语言的特点和例子
- android多接口请求参数,okhttp3 使用json参数post方式请求接口数据(android)
- ceph的读写性能测试
- 利用Vmware workstation安装MS-DOS使用Turbo C 2.0
- 企业微信客户端调试工具
- 用excel绘制统计图表(清风建模学习笔记)
- 在postgre中进行搜索关键字查询的方法
- scratch案例——小游戏制作人物攻击、受伤动作篇
- 住在上千万的豪宅里,你猜建筑成本占多少?
- “十三五”公共安全规划涉及哪些安防概念?
- Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码)
- CPU处理器IO接口小结
- 语雀(专业的云端知识库)
- R语言,向量x=c(“我“,“你“,“我“,“我“,“你“,“他“,“们“,“他“,“人“)中,统计向量x中的字出现的次数。 写出R代码。
- UIKit Dynamics入门
- 网络神经科学 Network neuroscience