单例设计模式的介绍
单例设计模式是一个常问的面试题,单例设计模式在常常被使用到。
单例设计的定义:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
单例设计的特点:
1.单例类只有一个实例对象;
2.该单例类对象必须由单例类自行创建;
3.单例类对外提供一个访问该单例的全局访问点。
单例设计模式的优缺点有如下:
优点 | 缺点 |
---|---|
1.在内存里只有一个实例,减少了内存的开销,尤其是平凡的创建和销毁实例; 2.避免对资源的多重占用; 3.单例模式可以在系统设置全局访问点,优化和共享资源访问。 | 1.单例模式一般没有接口,扩展很难。若扩展只能修改代码; 2.与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么来实例化 |
懒汉模式:
public class LazyPattern {//该类仅仅用来做一件(一类)事
//使用volatile关键字保证了d的值是最新的
private static volatile LazyPattern d = null;
private LazyPattern(){}
//提供一个全局访问点
//在方法中使用synchronized关键字保证线程安全
public static synchronized LazyPattern getInstance(){
if(d == null){
d = new LazyPattern();
}
return d;
}
public void work(){//唯一方法
System.out.println("工作");
}
}
饿汉模式:
public class HungryPattern {//该类仅仅用来做一件(一类)事
private static LazyPattern d = new HungryPattern();
private LazyPattern(){}
//提供一个全局访问点
public static synchronized LazyPattern getInstance(){
return d;
}
public void work(){//唯一方法
System.out.println("工作");
}
}