在java中一共有23種設計模式,
這里學習的是其中的一種:單例設計模式
-
首先份汗,我們說一下單例的定義:
- 單例就是程序在運行期間不管通過什么途徑盈电,執(zhí)行創(chuàng)建的對象都是同一個。
- 而且對象的生命周期是整個項目運行期間裸影。
- 單例有兩種寫法:餓漢式與懶漢式
下面我們來依次介紹一下:
在寫單例的時候,我們需要定義一個類:
//餓漢式
class Person {
//單例可以實現(xiàn)共享數(shù)據(jù)
//加static可以是實現(xiàn)對象的生命周期為整個項目運行期間
static Person person = new Person();
//不管在哪里調(diào)用的都是person對象
static Person getInstance() {
return person;
}
//我們每次都是通過調(diào)用getInstance這個方法來創(chuàng)建對象,我們這個方法會返回person,所以每次都是同一個對象;
}
//懶漢式
class Student {
//volatile (為了防止棧的緩存) 每個線程都有自己的棧,他與synchronized構成雙層保險,確保唯一性;
volatile static Student stu = null;
static Student getInstance() {
synchronized (Student.class) {
if (stu == null) {
stu = new Student();
}
}
return stu;
}
}
- 我們可以在main函數(shù)中測試一下
- 這里我們寫一個循環(huán),創(chuàng)建10個student對象,
public static void main(String[] args) {
//Person p = Person.getInstance();
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
public void run() {
Student student = Student.getInstance();
System.out.println(student);
}
}).start();
}
}
- 打印會發(fā)現(xiàn),打印的都是同一個對象;