您现在的位置是: 首页 >  个人博客日记 >  Java单例模式 博客详情

Java单例模式

请叫我菜鸟 2019-03-25 22:03 【JavaSE基础】 918次预览

简介单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;...

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

单例模式实现代码如下:

class Single{
    private static Single s = new Single(); //声明本类的引用类型变量,并且使用该变量指向本类对象。使用static关键字使得s在内存中只有一份。
    private Single(){} //声明私有构造函数,使得在本类外不能实例化本类对象
    public static Single getSingleObject(){
        return s;
    }
    //提供一个公共的静态的方法,可以返回这个唯一的对象。
}
class Demo{
    public static void main(String []args){
        Single s1 =Single.getSingleObject();
        Single s2 =Single.getSingleObject();
        System.out.Println("是一个对象吗?"+(s1 == s2));
        //==用来判断这两个对象的内存地址是否一样,如果一样,说明是同一个对象。
    }
}

以上的单例设计模式称为饿汉模式,意思是不管需不需要这个对象,但在类文件加载的时候这个对象已经被实例化了,如果这个类对象至始至终都没有使用,则这个类对象就会浪费内存空间,因此有了以下的懒汉模式,也就是在使用的时候,才创建对象,代码实现如下:

class Single{
    private static Single s;//声明一个该对象的引用,但不进行实例化,static不初始化时,s默认的值为null
    private Single(){}//保证只能在本类实例化对象
    public static Single getSingleObject(){
        if(s==null){ //判断该引用是否为空
            s = new Single(); 
        }
        return s;
    }
}
class Demo{
    public static void main(String []args){
        Single s1 = Single.getSingleObject();
        Single s2 = Single.getSingleObject();
        System.out.pringln("是同一个对象吗?"+(s1==s2));
    }
}

以上为懒汉单例设计模式的实现,但是该模式有个缺陷,就是在多线程访问的时候有一定的安全隐患。所以目前还是推荐使用饿汉模式。

加入我们

  • Java学习资源网官方群1

    群号:280998807(已满)

  • Java学习资源网官方群2

    群号:291195645

  • Java学习资源网官方群3

    群号:691628026

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~