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

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++ );
        }
        
    }
    
}
原文地址:https://www.cnblogs.com/leonkobe/p/4287770.html