java设计模式学习之单例模式

来源:互联网 发布:数据炼金 编辑:程序博客网 时间:2024/05/17 06:24

一、概述

在实际开发中,有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等,如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。
单例模式保证整个应用中某个实例有且只有一个
单例模式分为饿汉模式与懒汉模式

二、案例代码

1.恶汉模式Singleton.java

package com.czhappy.designpattern.singleton;/** *  * @ClassName: Singleton  恶汉模式 * @Description: 单例模式,保证应用程序中某个实例有且仅有一个 * @author chenzheng * @date 2017-1-13 上午11:44:26 */public class Singleton {    //创建唯一的一个实例    private static Singleton instance = new Singleton();    //将构造方法私有,不让外部直接创建对象    private Singleton(){    }    //提供一个用于获取实例的方法    public static Singleton getInstance(){        return instance;    }}

2.懒汉模式Singleton2.java

package com.czhappy.designpattern.singleton;/** *  * @ClassName: Singleton  懒汉模式 * @Description: 单例模式,保证应用程序中某个实例有且仅有一个 * @author chenzheng * @date 2017-1-13 上午11:44:26 */public class Singleton2 {    //创建唯一的一个实例    private static Singleton2 instance;    //将构造方法私有,不让外部直接创建对象    private Singleton2(){    }    //提供一个用于获取实例的方法    public static Singleton2 getInstance(){        if(instance==null){            instance = new Singleton2();        };        return instance;    }}

3.测试类Test.java

package com.czhappy.designpattern.singleton;public class Test {    public static void main(String[] args) {        Singleton s1 = Singleton.getInstance();        Singleton s2 = Singleton.getInstance();        if(s1==s2){            System.out.println("s1与s2是同一个实例");        }else{            System.out.println("s1与s2不是同一个实例");        }        Singleton2 s3 = Singleton2.getInstance();        Singleton2 s4 = Singleton2.getInstance();        if(s3==s4){            System.out.println("s3与s4是同一个实例");        }else{            System.out.println("s3与s4不是同一个实例");        }    }}

4.测试结果
这里写图片描述

三、总结
恶汉模式的热点是加载类时比较慢,但运行时获取对象的速度比较快 线程安全
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全

0 0