單例模式

單例類設計特點:
1.單例類包含自身聲明的類變量,這個類變量是單例類唯一的實例。
2.單例類的構造方法訪問權限是Private。爲了確保單例類中自身聲明
是單例類唯一的實例,單例類必須將構造方法訪問權限設置爲Private,
這樣一來,任何其他類都無法使用單例類來創建對象。
3.單例類負責創建自己唯一的實例,並提供訪問該實例的類方法。
由於單例類的構造方法被設置爲Private,所以單例類必須自己
負責創建自己聲明的實例。爲了讓用戶使用單例類的這個唯一的實例,
單例類必須提供一個類方法,以便其他用戶使用單例類的類名就可以
調用這個類方法訪問單例類的這個唯一的實例。
單例模式的優點:
單例類的唯一實例由單例類本身來控制,所以可以很好地
控制用戶何時訪問它。
適合使用單例類模式的情景:
當系統需要某個類只能有一個實例時。
package day15.demo3;

//測試單例模式
public class TestInstance1 {
    public static void main(String[] args) {
        Competition1 c = Competition1.getChampion();
        System.out.println(c);
        c.printName();

        Competition1 c2 = Competition1.getChampion();
        System.out.println(c2);
        c2.printName();

        Competition2 c5 = Competition2.getChampion();
        System.out.println(c5);
        c5.printName();

        Competition2 c7 = Competition2.getChampion();
        System.out.println(c7);
        c7.printName();

        Competition3 c9= Competition3.getChampion();
        System.out.println(c9);
        c9.printName(); 

    }
}

//餓漢單例模式
class Competition1{
    private static Competition1 champion = new Competition1();
    private Competition1(){
    }
    public static Competition1 getChampion(){
        return champion;
    }
    public void printName(){
        System.out.println("我是冠軍!");
    }
}

//懶漢單例模式 (涉及線程安全問題 要加上synchronized 改成同步方法)
class Competition2{
    private static Competition2 champion;
    private Competition2 (){
    }
    public static synchronized Competition2 getChampion(){
        if (champion  == null){
            champion = new Competition2();
            return champion;
        }
        return champion;
    }
    public void printName(){
        System.out.println("我是冠軍!");
    }
}

class Competition3{
    private static Competition3 champion;
    static{
        champion = new Competition3();
    }
    private Competition3 (){
    }
    public static  Competition3 getChampion(){
        return champion;
    }
    public void printName(){
        System.out.println("我是冠軍!");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章