您的位置:首页 > 编程语言 > Java开发

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

2017-01-13 14:27 309 查看
一、概述

在实际开发中,有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等,如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。

单例模式保证整个应用中某个实例有且只有一个

单例模式分为饿汉模式与懒汉模式

二、案例代码

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.测试结果



三、总结

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

懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: