前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA中的单例模式笔记

JAVA中的单例模式笔记

原创
作者头像
帅的一麻皮
修改2020-06-24 14:48:12
8540
修改2020-06-24 14:48:12
举报
文章被收录于专栏:前端与Java学习前端与Java学习

如何保证对象的唯一性?

步骤:

1.一个类中只要提供了构造方法 就可以产生多个对象,完全不能够保证唯一,既然创建对象数量不可控,干脆不让其他程序建立对象,直接私有化构造方法,不让其他程序创建。

2.不让其他程序创建,那么对象在哪里呢?干脆在本类中创建一个对象,可以对对象进行可控。

3.创建完对象之后,需要提供方法来返回对象

代码示例:

第一种是饿汉式单例模式:

代码语言:java
复制
//创建一个Single类
public class Single {
        //1、私有化构造方法
        private Single(){
        
        }
        //2、创建本类对象
        private static final Single s = new Single();
        //3、定义方法,返回对象
        public static Single getInstance(){
            return s;
      }
      
}

第二种是懒汉式单例模式(懒加载):

代码语言:javascript
复制
public class Single2 {
	//延迟加载    懒汉式单例模式
	private Single2(){
		
	}
	private static Single2 s2=null;
	
	public static Single2 getInstance(){
		if(s2==null){
			s2=new Single2();
		}
		return s2;
	}
}

测试获取的对象是否一致:

代码语言:javascript
复制
//创建一个SingleTest类
public class SingleTest {
    public static void main(String[] args) {
        //这样我们就可以保证获取对象的唯一性了
        Single s1 = Single.getInstance();
        Single s2 = Single.getInstance();
        Single s3 = Single2.getInstance();
        Single s4 = Single2.getInstance();
        System.out.println(s1==s2);//true   
        System.out.println(s3==s4);//true 
    }
}

解决多线程并发访问的线程安全问题,和加上同步机制后的效率降低问题:

代码语言:java
复制
public class Single2 {
    //延迟加载    懒汉式单例模式
    private Single2(){}
    private static Single2 s2=null;
    
    public static Single2 getInstance(){
    //通过双重判断的方式,解决效率问题,减少对锁的判断次数
        if(s2==null){
            synchronized (Single2.class) {
                if(s2==null){
                    s2=new Single2();
                }
            }
        }
        return s2;
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何保证对象的唯一性?
    • 第一种是饿汉式单例模式:
      • 第二种是懒汉式单例模式(懒加载):
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com