單例類設計特點:
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("我是冠軍!");
}
}
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("我是冠軍!");
}
}