JAVA设计模式之单件模式
2015-10-02 17:13
417 查看
单例模式的定义是:单例模式确保某个类只有一个实例,而且自行实例化,并且向整个系统提供该实例(全局只有一个访问点),这个类就是单例类。
由定义我们知道单例模式的特点:
1>单例类只能有一个实例。
2>单例类必须自己创建自己的唯一实例。
3>单例类必须给所有其他对象提供这一实例。
那么我们就会知道单例类中的工厂方法是静态方法,
public class Single{
private static Single singlee=new Single();
private Single(){}
public static Single getSinglee(){ //全局入口
return singlee;
}
}
public class Single{
private static Single singlee=null;
private Single(){}
public static Single getSinglee(){ //全局入口
if(singlee==null){
singlee=new Single();
}
return singlee;
}
}
我写了两个方法大家可以从中看出来这两个方法的不同吗,对的实例化的对象的地方不一样,这就是我们说的饿汉模式和懒汉模式第一个为饿汉模式第二个为懒汉模式,一个是在调用时就已经创建好实例了但是会浪费一部分空间,而另外一个正好相反在定义时没有实例化但是在使用的时候才会实例化崔然节省了空间但是浪费了判断的时间所以懒汉模式是以空间换时间的模式,饿汉模式是以时间按换空间的模式。
双重检查加锁
“双重检查加锁”机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。
public
volatile class Single{
private static Single singlee=null;
private Single(){}
public static Single getSinglee(){ //全局入口
if(singlee==null){
singlee=new Single();
}
return singlee;
}
}
我们使用单例模式的时候最重要的是要看看他是否是唯一的!
由定义我们知道单例模式的特点:
1>单例类只能有一个实例。
2>单例类必须自己创建自己的唯一实例。
3>单例类必须给所有其他对象提供这一实例。
那么我们就会知道单例类中的工厂方法是静态方法,
public class Single{
private static Single singlee=new Single();
private Single(){}
public static Single getSinglee(){ //全局入口
return singlee;
}
}
public class Single{
private static Single singlee=null;
private Single(){}
public static Single getSinglee(){ //全局入口
if(singlee==null){
singlee=new Single();
}
return singlee;
}
}
我写了两个方法大家可以从中看出来这两个方法的不同吗,对的实例化的对象的地方不一样,这就是我们说的饿汉模式和懒汉模式第一个为饿汉模式第二个为懒汉模式,一个是在调用时就已经创建好实例了但是会浪费一部分空间,而另外一个正好相反在定义时没有实例化但是在使用的时候才会实例化崔然节省了空间但是浪费了判断的时间所以懒汉模式是以空间换时间的模式,饿汉模式是以时间按换空间的模式。
双重检查加锁
“双重检查加锁”机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。
public
volatile class Single{
private static Single singlee=null;
private Single(){}
public static Single getSinglee(){ //全局入口
if(singlee==null){
singlee=new Single();
}
return singlee;
}
}
我们使用单例模式的时候最重要的是要看看他是否是唯一的!
相关文章推荐
- java15:面向对象
- 【因子算法】——求一个数的因子、质因子、求两个数的公因子
- java中的io机制
- Java堆和栈的区别 经典总结(转载)
- Java初学者都必须理解的七大问题
- 如何在Java中使用双重检查锁实现单例
- Java并发编程:volatile关键字解析 和双重检查(Double-Check)
- Java 字符串和整型的转换
- JAVA设计模式之工厂模式
- Java进阶(一)JDBC
- 错误: 找不到或无法加载主类
- JAVA SHH框架搭建(多图)
- 关于spring中<context:component-scan base-package="" />写法
- Java 序列化相关
- java.util.Comparator用法
- Java数据类型和MySql数据类型对应表
- java的一些原则
- 使用Java 的Mongo API操作doc
- java抽象类
- Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码