单例模式

(参考:http://blog.csdn.net/lanzhizhuxia/article/details/7920556,http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html)

单例模式的特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。


饿汉式其实是一种比较形象的称谓。既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是在装载类的时候就创建对象实例。
懒汉式其实是一种比较形象的称谓。既然懒,那么在创建对象实例的时候就不着急。会一直等到马上要使用对象实例的时候才会创建,懒人嘛,总是推脱不开的时候才会真正去执行工作,因此在装载对象的时候不创建对象实例。
/**
 * Project Name:DesignPatterns
 * File Name:EagerSingleton.java
 * Package Name:com.louis.singlePattern
 * Date:2017年9月26日下午8:36:37
 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
 *
*/

package com.louis.singlePattern;
/**
 * ClassName:EagerSingleton 
 * Function:  饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,
 *                 然后每次调用的时候,就不需要再判断,节省了运行时间
 * Reason:     TODO ADD REASON. 
 * Date:     2017年9月26日 下午8:36:37 
 * @author   michael
 * @version  
 * @since    JDK 1.7
 * @see      
 */
public class EagerSingleton {
    //设置静态变量,直接创建实例
    public static EagerSingleton eagerSingleton = new EagerSingleton();
    
    /**
     * 私有构造方法
     *
     */
    private  EagerSingleton() {
        System.out.println("调用私有构造方法");
    }
    //开放一个共有方法
    public static EagerSingleton getInstance(){
        System.out.println("返回实例");
        return eagerSingleton;
    }
    
}

 

/**
 * Project Name:DesignPatterns
 * File Name:LazySingleton.java
 * Package Name:com.louis.singlePattern
 * Date:2017年9月26日下午8:51:15
 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
 *
*/

package com.louis.singlePattern;

import javax.management.InstanceAlreadyExistsException;

/**
 * ClassName:LazySingleton 
 * Function: TODO ADD FUNCTION. 
 * Reason:     TODO ADD REASON. 
 * Date:     2017年9月26日 下午8:51:15 
 * @author   michael
 * @version  
 * @since    JDK 1.7
 * @see      
 */
public class LazySingleton {
    //静态变量
    public static LazySingleton lazySingleton = null;
    //私有构造函数
    private LazySingleton(){
        System.out.println("调用构造函数");
    }
    /*
     * 静态工厂方法
     * */
    public static synchronized LazySingleton getInstance(){
        if(lazySingleton == null){
            lazySingleton = new LazySingleton();
            System.out.println("创建实例");
        }
        System.out.println("返回实例");
        return lazySingleton;
    }
    
    
}

 

/**
 * Project Name:DesignPatterns
 * File Name:MainSingle.java
 * Package Name:com.louis.singlePattern
 * Date:2017年9月26日下午8:41:12
 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
 *
*/

package com.louis.singlePattern;
/**
 * ClassName:MainSingle 
 * Function: TODO ADD FUNCTION. 
 * Reason:     TODO ADD REASON. 
 * Date:     2017年9月26日 下午8:41:12 
 * @author   michael
 * @version  
 * @since    JDK 1.7
 * @see      
 */
public class MainSingle {
/*    public static void main(String[] args) {
        EagerSingleton eagerSingleton = EagerSingleton.getInstance();
        EagerSingleton eagerSingleton2 = EagerSingleton.getInstance();
        if(eagerSingleton==eagerSingleton2){
            System.out.println("是同一个实例");
        }
    }
    */
    public static void main(String[] args) {
        LazySingleton lazySingleton = LazySingleton.getInstance();
        LazySingleton lazySingleton2 = lazySingleton.getInstance();
        if(lazySingleton==lazySingleton2){
            System.out.println("是同一个实例");
        }
    }
}

 

posted on 2017-09-23 11:24  Michael2397  阅读(148)  评论(0编辑  收藏  举报

导航