1. 程式人生 > >JAVA 設計模式—單例模式

JAVA 設計模式—單例模式

成員變量 說明 不用 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 設計模式—單例模式