单例模式

单例类设计特点:
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("我是冠军!");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章