设计模式简单入门---单例模式

Posted shaoxiaosa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式简单入门---单例模式相关的知识,希望对你有一定的参考价值。

1 定义

  Ensure a class only has one instance,and provide a global point of access to it. (保证一个类仅有一个实例,并提供一个访问它的全局访问点)

2 用处

   当前系统的某一个对象只需要一个实例的时候使用,比如:JDBC的连接在很多时候只需要一个实例。

3 优点

  有利于控制实例的个数,从而节省了内存,有利于java的垃圾回收。

4 实现

  懒汉模式(不能在多线程中使用)

public class SimpleSingleton {
    private static SimpleSingleton instance;
    private SimpleSingleton(){}
    public static SimpleSingleton getIntance(){
        if(instance == null)
            instance = new SimpleSingleton();
        return instance;
    }
}

  懒汉模式(可以在多线程下使用,但效率低)

public class SingletonSync {
    private static SingletonSync instance;
    private SingletonSync(){}
    public static synchronized SingletonSync getInstance(){
        if (instance == null) {
            instance = new SingletonSync();
        }
        return instance;
    }
}

  饿汉模式(会在初始化的时候进行实例化,初始化速度变慢)

public class SingletonHungry {
    private static SingletonHungry instance = new SingletonHungry();
    private SingletonHungry(){}
    public static SingletonHungry getInstance(){
        return instance;
    }
}

  枚举(不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,没有实际使用过,简单粗暴~)

public enum SingletonEnum {
    instance;
   
}

  双重校验锁

public class SingletonDouble {
    private volatile static SingletonDouble singletonDouble;
    private SingletonDouble(){}
    public static SingletonDoublegetSingletonDemo7(){
        if (singletonDouble== null) {
            synchronized (SingletonDouble .class) {
                if (singletonDouble== null) {
                    singletonDouble= new SingletonDouble ();
                }
            }
        }
        return SingletonDouble ;
    }
}

 

以上是关于设计模式简单入门---单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式(从放弃到入门)

设计模式入门-单例模式

设计模式之单例模式

如何写一个简单的单例模式?

入门设计模式——单例模式

设计模式之单例模式以及简单代码实现