单例类设计特点:
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("我是冠军!");
}
}