Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1276881
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: C/C++

2013-07-23 09:50:00

提起设计模式,确实有不少著作讨论它,<<设计模式>>一书理论化很强,我这里干脆整理出一些用代码来体现的实例来说明。

第一个就是Singleton模式,意指始终保证只创建或得到一个唯一的实例。

其代码如下:


提起设计模式,确实有不少著作讨论它,<<设计模式>>一书理论化很强,我这里干脆整理出一些用代码来体现的实例来说明。

第一个就是Singleton模式,意指始终保证只创建或得到一个唯一的实例。

其代码如下:



package com.sql9.created;

/**
 * @author iihero
 */

class SafeSingleton
{
    public static class Holder
    {
        private static SafeSingleton instance = new SafeSingleton();
    }
    
    private SafeSingleton()
    {
        System.out.println("SafeSingleton initialized here....");
    }
    
    public static SafeSingleton getInstance()
    {
        return Holder.instance;
    }
    
}

public class Singleton
{
    private static Singleton _instance;
    
    private Singleton()
    {
    }
    
    public static Singleton getInstance()
    {
        synchronized(Singleton.class)
        {
            if (_instance == null)
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }
    
    public static void main(String[] args)
    {
        System.out.println(Singleton.getInstance());
        System.out.println(Singleton.getInstance());
        
        System.out.println(SafeSingleton.getInstance());
        System.out.println(SafeSingleton.getInstance());
    }

}

结果如下:


com.sql9.created.Singleton@c17164
com.sql9.created.Singleton@c17164
SafeSingleton initialized here....
com.sql9.created.SafeSingleton@14318bb
com.sql9.created.SafeSingleton@14318bb

总结:

这里SafeSingleton采取了lazy initialized方式来初始化,只有第一次调用时才会初始化Singleton这个实例。比Singleton类的实现要好一些。不加synchronized()的Singleton在多线程环境下,则会出现问题,可能出现同时初始化的情况。
阅读(2314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~