设计模式之------单例模式

单例模式:设计模式之一,单例模式,就是一个类只可创建一个对象。

      实现方法:将构造方法私有化。

实现1:饿汉模式

    public class Singleton{

        private  static Singleton instance=new Singleton();

        private  Singleton(){ }

        public  static Singleton getInstance(){

           return instance;

              }

      }

饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。

实现2:懒汉模式

    public class Singleton{

        private  static Singleton instance=null;

        private  Singleton(){ }

        public  static synchronized  Singleton getInstance(){

            if(instance==null){

               instance=new Singleton();  

               }

                    return instance;

              }

      }

懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间

3.双重检查加锁
  可以既实现线程安全,又提高性能。适用于jdk1.5及以上版本。

 

    public class Singleton{

        private  static Singleton instance=null;

        private  Singleton(){ }

        public  static Singleton getInstance(){

            if(instance==null){

            sychronized (Singleton.class){

              if(instance==null){

                 instance=new Singleton();  

             }

               }

               }

                    return instance;

              }

      }

 这种实现方式既可以实现线程安全地创建实例,而又不会对性能造成太大的影响。它只是第一次创建实例的时候同步,以后就不需要同步了,从而加快了运行速度.由于volatile关键字可能会屏蔽掉虚拟机中一些必要的代码优化,所以运行效率并不是很高。因此一般建议,没有特别的需要,不要使用。也就是说,虽然可以使用“双重检查加锁”机制来实现线程安全的单例,但并不建议大量采用,可以根据情况来选用。

4.Lazy initialization holder class模式

public class Singleton {
    
    private Singleton(){}
    private static class SingletonHolder{
        private static Singleton instance = new Singleton();
       }
    
    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
}

这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个域的访问,因此延迟初始化并没有增加任何访问成本

5.枚举。

public enum Singleton{

 instance;

  public  void singletonOperation{

    }

}

使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式.枚举的好处:1、 自由序列化; 2、 保证只有一个实例(即使使用反射机制也无法多次实例化一个枚举量); 3、 线程安全.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值