JAVA 設計模式—單例模式
阿新 • • 發佈:2018-05-11
成員變量 說明 不用 spa java程序 成員 AS AI 唯一性
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 設計模式—單例模式