zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java基础知识14- 单例设计模式

2023-09-27 14:22:12 时间

一 单例设计模式

1.1 作用

作用:保证一个类对外只提供一个实例对象。解决在一个类在内存中只存在一个对象。

1.2 好处

好处:节约内存资源,提高性能。

1.3 应用场景

1.widows中的任务管理器;

2.数据库连接池:避免数据库连接或者关闭引起的性能消耗。

3.多线程连接池。

1.4 实现方式

1.私有化一个该类的静态对象

2.定义一个私有的构造函数

3.提供一个静态的对外访问的方法 

1.4.1 饿汉式

实现方式:

publicclass SingleTon1 {

     //饿汉式
//1.私有化一个该类的静态对象

privatestatic SingleTon1st=new SingleTon1();

//2.定义一个私有的构造函数

 private SingleTon1(){}
//3.提供一个静态的对外访问的方法
     public static SingleTon1getInstance(){

          returnst;
     }
}

1.4.2 懒汉式

方式1:

public class SingleTon2 {
//懒汉式
private static SingleTon2 st=null;
private SingleTon2 (){};
public static synchronized SingleTon2getInstance(){
     if(st==null){
          st=newSingleTon2();
     }
     returnst;
  }
}

方式2: 

//双重锁的判定
public class SingleTon3 {
private static SingleTon3 st=null;
private SingleTon3(){};
public static SingleTon3 getInstance(){
     if(st==null){
          synchronized(SingleTon3.class){
                if(st==null){
                     st=newSingleTon3();
                }
          }

     }
     returnst;
}
}

1.4.3  饿汉式懒汉式和饿汉式的区别

饿汉式:随着类的加载便实例化一个对象,浪费资源,在多线程方面是安全的;

懒汉式:只有调用的时候才实例化一个对象,节省资源,在多线程方面存在不安全,需要加同步锁机制。

1.4.4 静态内部类 实现

public class InnerSingleTon {
private InnerSingleTon(){

}
private static class singleHolder{
private static InnerSingleTon st=new InnerSingleTon();
}
public static InnerSingleTon getInstance(){
return singleHolder.st;
}
}

 总结:兼顾了饿汉式和懒汉式的优点和缺点。

 http://blog.csdn.net/jason0539/article/details/23297037