单例设计模式:解决一个类在内存中只存在一个对象。保证唯一性:
1.先控制禁止其他程序建立该对象。
2.还为了其他程序可以为访问该类对象,在本类中自定义一个对象。
3.为了方便其他其程序对自定义对象的访问,可以对外提供一些访问方式。
对应操作:
1.将构造函数私有化。
2.在本类中创建一个本类对象(私有并且static)。
3.提供一个方法可以获取到该类对象。
构造函数私有化:
私有构造函数只能在函数内部调用,外部不能实例化,所以私有构造函数可以防止该类在外部被实例化。
单例化有两种方式:饿汉式和懒汉式
饿汉式:先初始化对象 ,A类一进入内存便建立一个对象
class A {
private A(){}
private static A s = new A();
public static A getInstance(){
return s;
}
}
懒汉式:对象是方法调用时,才初始化:
class A {
private static A s = null;
private A(){}
public static A getInstance(){
if(s==null)
s = new A();
return s;
}
}
补充(多线程部分内容):
单例模式就是为了使用这个对象,那么一般使用饿汉式,且安全。
单例设计模式中懒汉式:延迟加载。
在多线程访问是会出现问题,会出现效率低下。使用双重否定来解决(减少锁的判断次数)。
synchronized 同步。懒汉式加入以后比较慢。
if(s == null){
synchronized(A.class){
if(s == null)
{
s = new A();
}
}
}
大体是这样..... |