码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之--单例模式(singleton)

时间:2015-02-12 13:57:14      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

package dmode.singleton;

import java.util.Random;

/**
 * 类描述:  单例模式
 * 单例定义:ensure a class has only one instence,and provide a global point of access to it
 * 确保一个类只有一个实例,并且提供一个全局访问点来访问这个实例 
 * 其他内容:static 关键字修饰的内容,存储在静态代码区域,
 * java 的存储内容包括:堆、栈(常量、对象引用)、静态存储区
 * @version 1.0  CreateDate: 2015-2-12
 *
 * @history:
 * @updateDate            @updatePerson        @declare
 * 
 */
public class SinglClass {
    private static String singlParam;
    
    //懒汉式声明,在使用对象的时候再获取
    //线程不安全:在getInstenc() 方法中,如果并发,可能获取获取多个实例
    //解决方法:可以用 synchronized 修饰方法,也可以在方法体内用 synchronized{}代码块
    private static SinglClass singlClazz;
    
    //饿汉式声明,在类的初始化时就获取实例,final 的作用是让这个实例不在变化
    //线程安全
    private static final SinglClass singlClazz2 = new SinglClass("饿汉式");
    
    private static int time = 1;
    
    private SinglClass(String param){
        System.out.println("开始构造对象" + new Random().nextInt(100) + param);
    }
    
    //懒汉式声明
    //synchronized 保证线程安全
    public static synchronized SinglClass getInstence(){
        if(singlClazz == null){
            singlParam = "懒汉式";
            singlClazz = new SinglClass("懒汉式");
        }
        return singlClazz;
    }
    
    //饿汉式声明
    public static SinglClass getInstence2(){
        return singlClazz2;
    }
    
    public void sayHello(){
        if(this == singlClazz){
            System.out.println(singlParam + "say Hello " +  time++  );
        }else{
            System.out.println("饿汉式" + "say Hello " +  time++ );
        }
        
    }
    
}

 

设计模式之--单例模式(singleton)

标签:

原文地址:http://www.cnblogs.com/leonkobe/p/4287770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!