单例设计模式
单例设计(singleton)模式介绍
设计模式:
就是对一些常见问题进行归纳总结,并针对具体问题给出一套通用的解决办法(强调的是解决问题的思想);在开发中,只要遇到这类问题,就可以直接使用这些设计模式解决问题;
最早起源于建筑领域,在建筑领域把一些问题和经验进行归纳总结,形成一套可以用来在建筑领域解决大多数问题的方案;
后来计算机领域借鉴了建筑领域的设计模式,把计算机领域中经常遇到的问题进行归纳和总结,形成计算机领域23种设计模式;
单例(单态、原子)设计模式:
原理:在程序运行中,一个类最多只能有一个对象;
案例:模拟月亮,不管哪里调用的月亮,都是同一个对象
单例设计模式的代码模板
总结实现单例的步骤:
1、私有化构造函数;
2、在本类中创建唯一实例对象;
3、对外提供公开的访问方法,获取这个对象
public class Single {
//私有化构造函数
private Single() {
}
//在本类中创建唯一实例对象
private static Single s = new Single();
//提供公开的访问方法
public static Single getSingle(){
return s;
}
这种方式叫做饿汉式;
这种实现方式有点问题:
这种方式,只要使用到这个类,就一定会创建对象,会造成内存的浪费;
好处是:保证对象的唯一性;
解决办法:懒汉式
public class Single {
//私有化构造函数
private Single() {}
//在本类中创建唯一实例对象
private static Single s = null;
//提供公开的访问方法 public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}
懒汉式的问题:
多线程环境下, 不能保证每次获取的都是同一个对象;
好处:避免内存浪费;
单例设计总结
设计模式:针对某一类问题的通用的解决办法;
单例设计模式:解决程序运行中一个类最多只能有一个实例对象的问题;
单例实现的步骤:
1、私有构造函数,避免其他类可以直接创建单例类的对象;
2、在本类中创建唯一实例,使用静态成员变量保存;为保证安全性,私有化 这个成员变量;
3、对外提供一个公开的静态方法,供其他类获取本类的唯一实例;
单例的两种实现方法:
饿汉式: 在加载类的同时就创建了这个类的唯一实例;
好处:可保证这个类的实例的唯一性;
弊端:如果只是使用这个类,但是暂时不需要它的对象,也会创建唯一实例, 造成内存的浪费;
懒汉式: 在第一次调用获取实例的方法时才创建对象;
好处:第一次调用获取实例的方法时才创建对象,可以避免内存的浪费;
弊端:多线程环境下不能保证实例的唯一性;