设计模式学习笔记(1)——单利模式

本文详细介绍了单例模式的实现方式,包括懒汉式单例、急切式单例及双重检查加锁等不同方法,并讨论了如何在多线程环境下保证单例模式的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式必须只有一个实例,并且提供一个全局访问方法。

解析经典单利模式实例:

 1 package designPatterns;
 2 
 3 public class Singleton {
 4 
 5      //利用一个静态变量来记录类的唯一实例
 6 
 7      private static Singleton uniqueInstance;
 8 
 9      //声明私有构造器,只有本类可以调用该构造器
10 
11      private Singleton(){}
12 
13      //创建一个静态的方法获取实例对象
14 
15      public static Singleton getSingletonObj(){
16 
17          if(uniqueInstance==null){
18 
19               uniqueInstance=new Singleton();
20 
21          }
22 
23          return uniqueInstance;
24 
25      }
26 
27 }
View Code

解决多线程同步问题:

  1. 添加线程同步synchronize

  例如:每次都进行同步效率较低,适用于较少适用对象场合

package designPatterns.singleton;

public class Singleton {

    //利用一个静态变量来记录类的唯一实例

    private static Singleton uniqueInstance;

    //声明私有构造器,只有本类可以调用该构造器

    private Singleton(){}

    //创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

    public static synchronized Singleton getSingletonObj(){

        if(uniqueInstance==null){

            uniqueInstance=new Singleton();

        }

        return uniqueInstance;

    }

   

}

2.创建急切单利模式:长时间占用内存(适用与频繁适用对象场合)

public class Singleton {

//利用一个静态变量来记录类的唯一实例

private static Singleton uniqueInstance=new Singleton();;

//声明私有构造器,只有本类可以调用该构造器

private Singleton(){}

//创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

public static Singleton getSingletonObj(){

     return uniqueInstance;

}

}

3.双重检查加锁:

例如:只有第一次创建对象的时候才进行同步(volatile只用于JDK4.0以上版本

public class Singleton {

    //利用一个静态变量来记录类的唯一实例

    private static volatile Singleton uniqueInstance ;

    //声明私有构造器,只有本类可以调用该构造器

    private Singleton(){}

    //创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

    public static  Singleton getSingletonObj(){

        if(uniqueInstance==null){

            synchronized(Singleton.class){

                uniqueInstance=new Singleton();

            }

        }

        return uniqueInstance;

    }

}

转载于:https://www.cnblogs.com/jishushijie/p/6169315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值