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

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

作者头像
SuperHeroes
发布2018-05-30 16:54:16
5460
发布2018-05-30 16:54:16
举报
文章被收录于专栏:云霄雨霁云霄雨霁云霄雨霁

单间模式:

确保一个类只有一个实例,并提供一个全局访问点。

如果需要一个类只能创建一个对象,可以使用单件模式。

经典的单件模式实现:

public class Singleton{
    //利用一个私有静态变量记录该类的唯一实例
    private static Singleton uniqueInstance;
    ...    //其他变量

    //构造器定义为私有,只有自Singleton类内部才能调用
    private Singleton(){}
    //利用一个静态方法实例化该类的唯一对象并返回这个对象
    public static Singleton getInstance(){
        if(uniqueInstance == null){
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
    ...    //其他方法
}

这段代码在多线程时可能会出问题。

解决方法1:利用同步监视器将getInstance()方法变成同步方法。

public static syschronized Singleton getInstance(){
    //...
}

解决方法2:使用急切创建实例而不是延迟实例化的做法。

public class Singleton{
    private static Singleton uniqueInstance = new Singleton();;
    private Singleton(){}//构造器定义为私有

    public static Singleton getInstance(){
        return uniqueInstance;        
    }
}

解决方法3:延迟实现又线程安全的做法:

public class Singleton{
    private volatile static Singleton uniqueInstance;  //使用voltile关键字修饰
    private Singleton(){}//构造器定义为私有

    public static Singleton getInstance(){
        if(uniqueInstance==null){    //检查实例,如果不存在则进入同步块
            synchronized (Singleton.class){    //同步监视器是Singleton的class
                if(uniqueInstance==null){    //进入同步块后再次检查
                    uniqueInstance = new Singleton();    //创建单例对象
                }
            }
        }
        return uniqueInstance; 
    }
}

要点:

  • 单件模式确保程序中一个类只有一个实例,同时也提供访问这个实例的全局点。
  • 在Java中实现单件模式,需要私有的构造器、一个静态方法和一个静态变量。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档