设计模式笔记 – Singleton 单例模式 (Design Pattern)
本文由发表于6年前 | J2EE | 暂无评论 |  被围观 3,490 views+
1、单例模式(Singleton):2、单例模式的结构图:3、实现代码如下:4、其他说明:
1、单例模式(Singleton):

一个类只会生成唯一的一个对象。保证一个雷仅有一个实例,并提供一个访问它的全局访问点。

2、单例模式的结构图:

3、实现代码如下:

下面提供两种实现方式:

/**
 * 第一种实现方式
 */
class Singleton{
    //创建静态的唯一实例
    private static Singleton singleton = new Singleton();
    //把构造函数设置为私有,禁止外部使用new创建对象
    private Singleton(){

    }
    //外部获取唯一实例的方法
    public static Singleton getInstance(){
        return singleton;
    }
}

/**
 * 第二种实现方式:懒汉式
 */
class Singleton2{
    //声明静态的唯一实例
    private static Singleton2 singleton;
    //把构造函数设置为私有,禁止外部使用new创建对象
    private Singleton2(){

    }
    //外部获取唯一实例的方法
    public static Singleton2 getInstance(){
        if(singleton == null){
            singleton = new Singleton2();
        }
        return singleton;
    }
}

客户端调用:

public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
}
4、其他说明:

在第二种方法中,即懒汉式,存在线程安全问题。如果有多个线程同时访问该方法,可能会导致多次创建实例,为了解决问题,可以使用对象锁的机制:

class Singleton2{
    //声明静态的唯一实例
    private static Singleton2 singleton;
    private static Object object = new Object();
    //把构造函数设置为私有,禁止外部使用new创建对象
    private Singleton2(){

    }
    //外部获取唯一实例的方法
    public static Singleton2 getInstance(){
        if(singleton == null){
            //加锁设置多线程安全
            synchronized(object) {
                //判断限制只能让一个线程创建一个实例
                if(singleton == null){
                    singleton = new Singleton2();
                }
            }
        }
        return singleton;
    }
}

这样就不会出现线程安全问题了。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/design-pattern-notes-singleton-singleton-design-pattern.html
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 10/26
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    没有评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 C++语法笔记 – 群体类和群体数据 类模板 2011/9/4
2 JVM笔记 – 自动内存管理机制(Java内存区域与内存溢出异常) 2014/11/11
3 Android工程目录结构的说明 创建工程 AndroidManifest.xml 2011/7/12
4 ExtJS使用ColumnModel创建表格和使用ArrayReader解析数组 2011/5/9
5 设备管理及其相关技术-磁盘调度SPOOLing技术 2011/6/30
6 使用Eclipse开发Java Web过程中Debug调试的使用方法 2011/9/10
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.