java中的单例模式

来源:互联网 发布:手机装windows 编辑:程序博客网 时间:2024/06/07 01:12

在单例模式中,一个类只能创建一个实例,不管何时调用getInstance(),获得的都是同一个对象的引用,因为在singleton中都被声明为static,所以在程序运行时不会被jvm回收,所以自始至终都是同一个对象的引用,

关于Singleton的几种方式,
1:是懒汉模式,在需要这个对象的时候去检查引用是否为空,如果为空则创建一个新的对象,并且这个对象一直被静态引用持有。这样每次调用getInstance()方法的时候都需要调用判断。
2:是饿汉模式,在一开始就让static引用持有一个对象,在调用getInstance()时就直接返回此对象。
这两种模式都是让Singleton的构造方法为private,使得外界不能通过构造方法来实例化更对类的对象。

package tablejava;public class Singleton {    private static Singleton uniqueInstance_Lazy;    private static Singleton uniqueInstance_Hunger=new Singleton();    //保证外部类不会通过调用构造方法来实例化其他对象    private Singleton() {    }    public static Singleton getInstance_lazy() {          if(uniqueInstance_Lazy==null) {              uniqueInstance_Lazy=new Singleton();            }          return uniqueInstance_Lazy;    }    public static Singleton getInstance_Hunger() {          return uniqueInstance_Hunger;    }    public static void main(String[] args) {        Singleton single1_1=Singleton.getInstance_lazy();        Singleton single1_2=Singleton.getInstance_lazy();        if(single1_1==single1_2) {            System.out.println("single1_1和single1_2是同一个对象");        }else  {            System.out.println("single1_1和single1_2不是同一个对象");        }        Singleton sigle2_1=Singleton.getInstance_Hunger();        Singleton sigle2_2=Singleton.getInstance_Hunger();        if(sigle2_1==sigle2_2) {            System.out.println("sigle2_1和sigle2_2是同一个对象");        }else  {            System.out.println("sigle2_1和sigle2_2不是同一个对象");        }    }}

输出结果:

single1_1和single1_2是同一个对象sigle2_1和sigle2_2是同一个对象
原创粉丝点击