------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
针对的问题是需求能保证一个类在内存中的对象是唯一的。
思想:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。
步骤:
1. 为了避免其他程序过多创建该类实例,先禁止其他程序创建该类实例,将构造器初始化
2. 还为了让其他程序可以访问到该类实例,只好在该类中自己创建一个实例
3. 为了方便其他程序对该类实例的访问,还要对外提供一些访问方式,就是提供一个方法返回该类的实例
代码体现:
1. 私有化构造函数。
2. 创建私有并静态的本类对象。
3. 定义公有并静态的方法,返回该对象。
注意事项:
不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应
类的静态成员中。
不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应
类的静态成员中。
不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应
类的静态成员中。
不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应
类的静态成员中。
1. 不要使用单例模式存取全局变量
2. 不要将数据库连接做成单例模式,因为一个系统可能与数据库有多个连接。
* 饿汉式
public class Single {
//1.将构造器私有化
private Single() { }
//2.自己创建实例
private static final Single instance = new Single();
//3.将实例提供给外部使用
public static Single getInstance() { return instance; }
}
* 懒汉式
public class Single {
//1.将构造器私有化
private Single() { }
//2.自己创建实例
private static Single instance = null;
//3.将实例提供给外部使用
public static synchronized Single getInstance() {
if (instance == null) {
synchronized(Single.class) {
if(instance == null)
<span style="white-space:pre"> </span>instance = new Single();
}
}
return instance;
}
}
懒汉式特点是实例的延迟加载,懒汉式延迟加载的弊端:如果多线程访问时,会出现安全问题,用加同步来解决,用同步代码块和同步函数都行,但是效率低,用双重判断的方式能解决效率问题,加同步的时候使用的锁是该类所属的字节码文件对象
单例设计模式的模板:
class Single
{
private static Single s = null;
private Single(){}
public static Single gerInstance()
{
if(s == null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}