
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明达内的老师这一期给大家讲创建型模式之单例模式。
定义
1、定义:
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
常见应用场景:
项目中读取配置文件的类,一般也只有一个对象。没必要每次使用配置文件的时候,都new一个对象去读取;
数据库连接池的设计一般是单利模式,因为数据库的连接是很耗资源的;
在servlet中的Application也是单利模式;
在Spring中,每个Bean都是单利的,这样的优点就是Spring容器可以去管理;
在Servet编程中,每个servlet也是单例的;
springMVC中的控制器也是单例的;
2、类图
1.类图分为三部分,依次是类名、属性、方法
2.以<<开头和以>>结尾的为注释信息
3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。
4.带下划线的属性或方法代表是静态的。
单例模式,它有以下几个要素:
私有的构造方法
指向自己实例的私有静态引用
以自己实例为返回值的静态的公有的方法
3、分类
常见的四种单例模式的实现方式:
-饿汉式(线程安全,调用效率高,不能延时加载)
-懒汉式(线程安全,调用效率不高,可延时加载)
-静态内部类式(线程安全,调用效率高,可延时加载)
-枚举单例(线程安全,调用效率高,不能延时加载,并且可以避免通过反射和序列化创建新对象)
饿汉式
所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。“懒汉式”是在你真正用到的时候才去建这个单例对象:
/饿汉式
public class SingletonTest01 {
//类初始化装载的时候,初始化该对象(类初始化是天然的线程安全)
private static SingletonTest01 instance = ew SingletonTest01();
//私有的构造器
private SingletonTest01() {
}
//方法没有同步块,并发效率高
public static SingletonTest01 getInstance() {
return instance;
}
}
懒汉式
/单例模式:懒汉式
public class SingletonTest02 {
//类初始化装载的时候,不初始化该对象(延时加载,真正使用的时候再创建)
private static SingletonTest02 instance;
private SingletonTest02() {
}
//方法需同步保证线程安全,调用效率低
public static synchronized SingletonTest02 getInstance() {
if (instance != null) {
return instance;
} else {
return new SingletonTest02();
}
}
}
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!