1、什麼是單例模式
單例模式解決一個類在內存中只存在一個對象的問題。
2、單例模式適合場景
單例模式適合於一個類只有一個實例的情況,比如窗口管理器,打印緩衝池和文件系統,它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統 的不同對象訪問,因此需要一個全局的訪問指針,這便是衆所周知的單例模式的應用。當然這只有在你確信你不再需要任何多於一個的實例的情況下。
3、單例模式特點:
①確保一個類只有一個實例被建立 提供了一個對對象的全局訪問指針
②在不影響單例類的客戶端的情況下允許將來有多個實例 。
4、餓漢式
特點:
先初始化對象
實現方法:
①避免其他程序過多地建立該類對象
②爲讓其他程序能夠訪問到該類對象,在奔類中自定義一個對象
③爲方便其他程序對自定義對象的訪問,提供對外的訪問方式。
class SingleTest
{
public static void main(String[] args)
{
Student s1 = Student.getInstance();
s1.setAge(18);
Student s2 = Student.getInstance();
System.out.println(s1.getAge()+","+s2.getAge());//18,18
}
}
class Student
{
private int age;
//①將構造方法私有化
private Student(){}
//②在類中創建一個本類對象
private static Student s = new Student();
//③提供一個方法可以獲取到該對象
public static Student getInstance(){
return s;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
5、懶漢式
特點:
對象被方法調用時才初始化,即對象的延時加載。開發當中常用餓漢式,但面試常問的是懶漢式。
實現方法:
class Person
{
private Person(){}
private static Person p = null;
public static Person getInstance(){
if(p == null)
{
synchronized(Person.class){
if(p == null)
p = new Person();
}
}
return p;
}
}