Java设计模式 -----单例模式(饿汉式)

单例设计模式:一个类中只允许产生一个实例化对象。

第一,首先考虑如何让限制对象的数量。

        平常在普通方法中则是类的外部通过对象调用,无法达到限制对象数量的目的。

package www.bit.java;

class Singleton {
    public void print(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest {
    public static void main(String[] args) {
        //实例化对象
        Singleton singleton1 = new Singleton();
        singleton1.print();
    }
}

        所以需要用private生命构造方法,则对象的产生是通过构造方法产生对象。

class Singleton {
    //private声明构造,限制在外部产生对象的方法
    private Singleton(){};
    public void print(){
        System.out.println("Helloworld");
    }
}

第二,构造方法私有后,外部不能调用构造。

       当外部无法调用构造方法,即外部不能够产生新的实例化对象,此时类则处于一个相对而言封闭的状态,如果继续想要使用Singleton该类调用print方法,则必须提供实例化对象。

      考虑到封装的特点,可以在类的内部产生一个实例化对象。

class Singleton{
    //在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象
    Singleton singleton = new Singleton();
    //private声明构造,限制在外部产生对象的方法
    private Singleton(){};
    public void print(){
        System.out.println("Helloworld");
    }
}

第三,Singleton无法实例化对象时,对singleton进行使用。

       Singleton内部的singleton是一个普通属性,所有的普通属性必须在有实例化对象时才能进行内部空间的分配,则使用static关键字通过类名称调用,并且静态属性在类加载时只初始化一次,产生一个实例化对象。

static Singleton singleton = new Singleton();

第四,类中属性使用private封装,并提供一个static的geter()方法。

       类中属性被private封装后,想取得其属性应提供geter()方法,而此时访问static属性,因为static方法不受对象实例化控制,因此应提供一个static的geter()方法。

class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){};
    public static Singleton getSingleton(){
        return singleton;
    };
    public void printO(){
        System.out.println("Helloworld");
    }
}

第五,使用final关键字,在整体操作中只产生唯一一个实例化对象。

     最终得到饿汉式:


class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){};
    public static Singleton getSingleton(){
        return singleton;
    };
    public void printO(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest{
    public static void main(String[]args){
        Singleton singleton = Singleton.getSingleton();
        singleton.print();
    }
}

懒汉式单例:

      特点:    当第一次使用Singleton对象时才会为其产生实例化对象的操作。

class Singleton{
    private  static Singleton singleton;
    private Singleton(){};//private声明构造

    public static Singleton getSingleton() {
        if (singleton == null){//表示此时还没有实例化
            singleton = new Singleton();
        }
        return singleton;
    }
    public void print(){
        System.out.println("Helloworld");
    }
}
public class SingletonTest{
    public static void main(String[]args){
        Singleton singleton = Singleton.getSingleton();
        singleton.print();
    }
}
发布了19 篇原创文章 · 获赞 16 · 访问量 3652

猜你喜欢

转载自blog.csdn.net/O9A0MA/article/details/88688969