Java中的单例(Singleton)类

来源:互联网 发布:cos图片特效软件 编辑:程序博客网 时间:2024/06/01 08:17

如果一个类始终只能创建一个实例,则这个类被称为单例类。
静态成员不能直接访问非静态成员。
一般情况下,一个类的构造器会用public修饰,允许任何类自由创建该类的对象,但在一些特殊的场景下,要求不允许自由创建该类的对象,所以,要把该类的构造器用private修饰,从而把该类的构造器隐藏起来
将该类的构造器隐藏之后,需要提供一个用private修饰的方法作为该类的访问点,即getter和setter方法,用于创建该类的对象,且该方法必须用static修饰,因为调用该方法的不可能是对象,只能是类。实例如下:

 class Singleton{    //使用一个类变量来缓存曾经创建的实例    private static Singleton instance;    //对构造器使用private修饰,隐藏该构造器    private Singleton(){};    //提供一个静态方法,用于返回singleton实例    //该方法可以加入自定义控制,保证只产生一个Singleton对象    //get方法    public static Singleton getInstance() {        //如果Instance为null,则表明还不曾创建Singleton对象,反之,则表示已创建。        if (instance == null) {            //创建一个Singleton对象,并将其缓存起来            instance = new Singleton();        }        return instance;    }}public class SingletonTest {    public static void main(String[] args) {        //创建Singleton对象不能通过构造器,只能通过getInstance方法来得到实例        Singleton s1 = Singleton.getInstance();        Singleton s2 = Singleton.getInstance();        String s3 =new String("hello");        String s4 = new String("hello");        System.out.println(s1 == s2);        //将输出true        System.out.println(s3 == s4);        //将输出false    }}

运行结果如下:

truefalse

由运行结果可知,Singleton类只能产生一个实例,所以,s1和s2指向的是同一个对象
而String类在内存中则是可以创建多个对象,所以,s3和s4指向两个不同的对象

0 0
原创粉丝点击