一,单例模式

https://www.cnblogs.com/zhaoyan001/p/6365064.html
概念:
在某些特殊场合中,一个类对外提供且只提供一个对象时,这样的类叫做单例类,而设计单例的流程和思想叫做单例设计模式。—(单例模式能保证一个类仅有一个实例,并提供一个访问它的全局访问点,同时在类内部创造单一对象,通过设置权限,使类外部无法再创造对象。单例对象能保证在一个JVM中,该对象只有一个实例存在。)
实现步骤:
私有化构造方法,使用private关键字修饰。

声明本类类型的引用指向本类类型的对象,并使用private static关键字共
同修饰。

提供公有的get方法负责将对象返回出去,并使用public static关键字共同

(1)饿汉式

  1. package Task_neuedu;
  2. public class Singleton {
  3. //单例模式,饿汉模式
  4. public static Singleton s=new Singleton(); //定义一个实例化对象的变量
  5. private Singleton(){ } //要达到单例的效果,必须让构造方法私有
  6. public static Singleton getInstance(){
  7. return s; //通过方法如实例化对象,指向的就是同一个实例
  8. }
  9. }
  1. package Task_neuedu;
  2. public class SingLetonTest {
  3. public static void main(String[] args) {
  4. Singleton s1=Singleton.getInstance(); //实例化对象s1
  5. Singleton s2=Singleton.getInstance(); //实例化对象s2
  6. System.out.println(s1==s2); //true,==比较的是地址,说明实例化指向的是同一个对象
  7. }
  8. }

(2)懒汉式

  1. package Task_neuedu;
  2. public class Singleton {
  3. //单例模式,饿汉模式
  4. public static Singleton s=null;
  5. private Singleton(){ }
  6. public static Singleton getInstance(){
  7. if (s==null){ //判断是否为空,如果为空,则创建
  8. s=new Singleton();
  9. return s;
  10. } //不为空,则直接返回
  11. return s;
  12. }
  13. }

(3)双重检查法

解决了懒汉式的空间和效率问题,加锁的机制也好了很多

  1. package Task_neuedu;
  2. //双重检查!
  3. public class Singleton2 {
  4. //私有化构造方法
  5. private Singleton2(){}
  6. public static Singleton2 instance;
  7. public static Singleton2 getInstance(){
  8. if (instance==null){ //减少时间,提高效率
  9. synchronized (Singleton2.class){ //加锁,使同时访问的用户按顺序实例化对象
  10. if (instance==null) //再次检查instance是否为空,为了安全,
  11. // 张三实例化过后,李四进去就不再实例化,实例化代码锁住,这个判断由此增加了安全性
  12. instance=new Singleton2();
  13. }
  14. }
  15. return instance ;
  16. }
  17. }