综述:Singleton即单例模式是指仅仅被实例化一次的类。比如任务管理器、文件管理器、回收站、某些工具类等,这些类在程序中仅仅需要一个实例就足够了,这个时候可以考虑使用单例模式。,以下介绍三种实现单例模式的方法:
1.饿汉式(类加载时创建实例)
/**
* Created by luffy on 9/21/15.
* 方法一实现单例模式:使用静态常量来作为唯一的实例,保证该类只有一个实例
*/
public class Elvis01 {
public static final Elvis01 ELVIS_01 = new Elvis01();
private Elvis01(){
}
public void leaveTheBuilding(){
System.out.println("Elvis01 leaveTheBuilding");
}
}
特点:线程安全,不能防止反射攻击,序列化需要进行额外工作(实现Serializable)
2.饿汉变种(提供静态方法获取实例)
/**
* Created by luffy on 9/21/15.
* 方法二实现单例模式:通过提供静态方法获取该类的实例
*/
public class Elvis02 implements Serializable{
private static final Elvis02 elvis = new Elvis02();
private Elvis02(){
}
public void leaveTheBuilding(){
System.out.println("Elvis02 leaveTheBuilding");
}
public static Elvis02 getInstance(){
return elvis;
}
}
特点:线程安全,不能防止反射攻击,序列化需要进行额外工作(实现Serializable)
3.懒汉式
/**
* Created by luffy on 9/21/15.
* 方法三实现单例模式:懒汉式
*/
public class Elvis04 implements Serializable{
private Elvis04 instance;
private Elvis04(){
}
public Elvis04 getInstance(){
if(instance == null){
instance = new Elvis04();
}
return instance;
}
}
特点:懒汉式,线程不安全,序列化需要进行额外工作(实现Serializable),延时加载
4.枚举类型的单例模式
/**
* Created by luffy on 9/21/15.
* 方法四实现单例模式:使用枚举类型,保证线程安全
*/
public enum Elvis03 implements Serializable{
INSTANCE;
public void leaveTheBuilding(){
System.out.println("Elvis03 leaveTheBuilding");
}
}
特点:绝对防止多次实例化,即使是面对复杂的序列化活着反射攻击的时候。虽然这种方法还没有被广泛采用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
5.静态内部类
/**
* Created by luffy on 9/21/15.
* 方法五实现单例模式:静态内部类
*/
public class Elvis05 implements Serializable{
private Elvis05(){
}
public Elvis05 getInstance(){
return SignletonHolder.instance;
}
private static class SignletonHolder{
private static Elvis05 instance;
}
public void leaveTheBuilding(){
System.out.println("Elvis03 leaveTheBuilding");
}
}
特点:懒加载,线程安全
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...
简单的单例模式举例Singleton 分为恶汉式 懒汉式
java singleton 不解释不解释不解释不解释
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
java Singleton单例模式 java Singleton单例模式
Java的Singleton模式代码(免资源分),你会发现Java的Singleton模式真的很有趣,原来程序还可以这样写。
Item 3: Enforce the singleton property with a private constructor or an enum type Item 4: Enforce noninstantiability with a private constructor Item 5: Prefer dependency injection to hardwiring ...
第3章 数据类型和运算符 38 3.1 注释 39 3.1.1 单行注释和多行注释 39 3.1.2 文档注释 40 学生提问:API文档是什么? 40 学生提问:为什么要掌握查看API文档的方法? 42 3.2 标识符和关键字 45 3.2.1 分隔符 ...
3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT); 4、有构造函数,构造函数都有参数(DEFINE_SINGLETON_CONSTRUCT); 通过宏定义巧妙实现,使用也很方便!
java 学习整理文档 Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定 最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”或者...
singleton pattern 的定义 主要应用方法 优缺点 通过代码 具体分析解释
17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building Strings(StringBuilder类) 17-73 17.8. 可变长的参数 17-73 17.9. JAVA5.0 的注释 (Annotation) 17-73 17.10. ...
Singleton在Java中的应用,实例介绍
Java的几个练习,reflect,singleton,DomAndSax
C++完美实现Singleton模式
1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...
单例模式(Singleton)
单例模式 Singleton 单例模式线程安全问题和拓展
在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这可以节省一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率...