前言
单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,而且要对外提供访问。
优点:在系统内存中只有一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象来说无疑可以提高系统性能。
缺点:没有抽象层,难以扩展;职责过重,一定程度上违背单一原则。
饿汉式
package project001;
/**
* 饿汉式
* **/
public class MyPrinter {
// 1. 私有化构造方法
private MyPrinter(){
}
// 2. 私有化成员变量
private static MyPrinter p=new MyPrinter();
// 3. 提供对外访问的方法
public static MyPrinter newInstance(){
return p;
}
}
懒汉式
package project001;
/**
* 懒汉式
* **/
public class MyPrinter {
// 1. 私有化构造方法
private MyPrinter(){
}
// 2. 私有化成员变量
private static MyPrinter p=null;
// 3. 提供对外访问的方法
public synchronized static MyPrinter newInstance(){
if(p==null){
p=new MyPrinter();
}
return p;
}
}
懒汉式是推迟类的加载时机,等到需要类的实例的时候才去加载。存在线程安全问题,需要同步。