標籤:模式 簡單介紹 return nbsp 初始化 bsp void 單例模式 執行個體
JAVA中的單例模式是一種廣泛使用的設計模式,是Java裡23種設計模式之一。單例模式的作用是保證在JAVA程式中,某個類只有一個程式存在。
這裡簡單介紹其兩種基本寫法:餓漢式和懶漢式。
餓漢式與懶漢式區別在於餓漢式在類載入時就對執行個體進行建立,優點是安全執行緒,缺點是不管用不用都佔用記憶體;懶漢式是單例在需要的時候採取建立的,如果單例已經建立,再次調用將不會建立新的對象,而是直接返回之前建立的對象,優點是佔用記憶體小,缺點是載入速度慢,線程不夠安全;
這裡以車舉例,同時定義一個成員變數司機來證實唯一性。
餓漢式
public class Car { //建立車類 private String driver; //定義成員變數司機名 private static Car car = new Car() //直接在初始化成員變數時執行個體化一輛車; private Car() { //為保證車的唯一,將構造方法設為私人的,這樣類外面就無法使用new Car()來執行個體化一輛車了; } public static Car getCar() { //定義一個公開的成員方法,用來擷取這輛車; return car; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; }}
懶漢式
public class Car { private String driver; private static Car car; //定義成員變數車,其類型是類本身;預設為null private Car() { } public static Car getCar() { if (car == null) { //當這輛車指向為null時,執行個體化一輛車,如果不是null,返回這輛車; car = new Car(); } return car; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; }}
測試
public class Test{ public static void main(String[] args) { Car car1 = Car.getCar(); //直接用類名調用靜態方法擷取一輛車;對象名為car1 Car car2 = Car.getCar(); //再次調用方法擷取一輛車;對象名為car2 car1.setDriver("小明"); //將car1的司機命名為小明 System.out.println(car2.getDriver()); //列印car2的司機名仍然是小明,說明這兩輛車是同一輛車,也就證明了這輛車的唯一性。 } }
JAVA 設計模式—單例模式