JAVA单例模式,java单例模式详解

  JAVA单例模式,java单例模式详解

  什么是单例模式?

  Singleton模式是一种常见的设计模式,它保证一个类的实例是单例的。

  单例模式的优点:

  (1)首先,必须是节省内存资源。无论通过暴露方法创建实例有多频繁,都可以保证创建的对象是系统内存中相同的实例对象;

  (2)灵活性,因为所有实例的创建都由这个类控制,所以这个类可以灵活改变实例化过程;

  (3)实例的受控访问,singleton类可以轻松控制唯一实例的受控访问;

  单例模式的缺点:

  (1) singleton模式没有接口,不容易扩展;

  (2)使用时,不能用反射模式创建singleton,否则会实例化一个新的对象;

  (3)使用懒惰单例模式时注意线程安全;

  实现单例模式的方式:

  饿单例方式

  包索引;

  公共类超人{

  //空构造函数

  私人超人(){}

  //实例化该对象

  私人静态超人supermanInstance=新超人();

  //获取实例化对象的静态函数getSupermanInstance()。

  公共静态超人getSupermanInstance(){

  返回supermanInstance

  }

  } Hungry singleton在加载类的时候提前更新了,一开始就实例化了一个supermanInstance对象。不管你的程序是否需要调用这个对象,它都准备好了;没有延迟加载,大多数情况下需要延迟加载来减少程序负载,所以这种实现singleton的方式并不是最好的选择。

  懒单例方式(单线程写法)

  包索引;

  公共类超人{

  //空构造函数

  私人超人(){}

  //实例化该对象;只声明new不用于实例化。

  私静超人supermanInstance=null

  //获取实例化对象的静态函数getSupermanInstance()。

  公共静态超人getSupermanInstance(){

  If(supermanInstance==null){ //如果为null,则再次实例化。

  supermanInstance=新超人();

  }

  返回supermanInstance

  }

  }声明一个对象而不实例化它。当程序需要实例化时,调用静态工厂方法getSuperManistance()。该方法判断声明的对象,如果为空,则再次实例化该对象。这种写入方式可以达到延迟加载的效果,但是非线程安全。如果两个线程在多个线程中同时调用静态工厂方法getSuperManistance(),就有可能重复创建该类的实例,破坏单例的唯一性。

  推荐教程:java教程以上是什么是Java singleton模式的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: