單例設計模式
保證類在內存中只有一個對象。
實現思想:
(1)控制類的創建,不讓其他類來創建本類的對象。private
(2)在本類中定義一個本類的對象。Singleton s;
(3)提供公共的訪問方式。 public static Singleton getMethod(){return s}
兩種實現方式:
1.餓漢式(開發):
2.懶漢式(面試):單例的延遲加載模式。
3.區別:
(1)餓漢式:省時間,費內存;懶漢式:費時間,省內存;
(2)在多線程訪問時,餓漢式不會創建多個對象,而懶漢式可能會創建多個對象。
package com.fenqing.Thread;
public class d01_singleton {
public static void main(String[] args) {
singleton1 s1=singleton1.getMethod1(); //4.創建對象訪問
singleton1 s2=singleton1.getMethod1();
singleton2 s3=singleton2.getMethod2(); //4
singleton2 s4=singleton2.getMethod2();
System.out.println(s1==s2); //5.判斷其是否爲同一地址,返回true或false
System.out.println(s3==s4); //5
}
}
class singleton1{ // 餓漢式
private singleton1(){
//1.創建私有構造方法
}
private static singleton1 s=new singleton1(); //2.創建私有、靜態的本類對象,或是public static final singleton1 s=new singleton1();
public static singleton1 getMethod1(){
return s; //3.創建公有、靜態的,訪問對象的方法,以便其他類訪問
}
}
class singleton2{ // 懶漢式
private singleton2(){
//1.創建私有構造
}
private static singleton2 s; //2.創建本類對象
public static singleton2 getMethod2(){
if(s==null){ //3.創建訪問方法,並判斷是否爲空
s=new singleton2();
}
return s;
}
}