单例设计模式

来源:互联网 发布:ubuntu iptables启用 编辑:程序博客网 时间:2024/05/01 08:18

设计模式(感觉超级烦人)博大精深,这次说说最简单的单例设计模式。

//饿汉式public class Single_Hungry {private static Single_Hungry s = new Single_Hungry();private Single_Hungry() {//构造方法必须私有 以避免多个实例被创建}public static Single_Hungry getInstance() {return s;}}

//懒汉式class Single_Lazy {private static Single_Lazy s = null;private Single_Lazy() {//构造方法必须私有 以避免多个实例被创建}public static Single_Lazy getInstance() {if(s == null) {s = new Single_Lazy(); //延迟加载}return s;}}


饿汉式,简单粗暴,但有一个问题就是不管用不用得到这个对象都先创建出来再说(静态方法)。这样在有些情况下往往会造成一些无用对象而浪费内存并且给JVM造成不必要的压力。

懒汉式,有一个优点就是延迟加载,用到这个对象时才会创建对象,并且会先判断一下当前有没有这个对象,再决定是否创建。这样就避免了饿汉式带来的问题。但懒汉式自己也存在一个问题那就是线程安全问题。在多线程的情况下,他的延迟加载功能可能失效。

所以便要进行线程安全处理

public class Single_Lazy {private static Single_Lazy s = null;private Single_Lazy() {}public static Single_Lazy getInstance() {if(s == null) {//减少锁的判断次数 只要有一个初始化完成 便不再进入synchronized(Single_Lazy.class) {if(s == null) {s = new Single_Lazy(); //延迟加载}}}return s;}}
进行双重判断,是为了减少对锁的判断,减少开销,提高效率。(一旦有一个对象被创建,之后就不会判断锁了)


1 0