1.什么是单例模式?
所谓类的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
通俗的理解就是:在Bank类中,只能存在一个Bank类的对象实例instance,
并且在该类中只提供一个取得Bank类的实例方法getInstance()。
2.两种单例模式
2.1饿汉式
public class BankTest {
public static void main(String[] args) {
Bank bank1 = Bank.getInstance();
Bank bank2 = Bank.getInstance();
System.out.println(bank1==bank2); //true
}
}
//饿汉式
class Bank{
//1.类的构造器私有化
private Bank(){}
//2.在类的内部创建当前类的实例
private static Bank instance =new Bank();
//3.使用getXxx()方法获取当前类的实例,必须声明为static
public static Bank getInstance(){
return instance;
}
}
2.2 懒汉式
class GirlFriend{
//1.类的构造器私有化
private GirlFriend(){}
//2.声明当前类的实例
public static GirlFriend instance=null;
//3.通过getXxx()获取当前类的实例,如果未创建对象,则在方法内进行创建
public static GirlFriend getInstance(){
if(instance==null){
instance=new GirlFriend();
}
return instance;
}
}
3.对比两种设计模式
特点:
-
饿汉式: "立即加载",随着类的加载,当前的唯一实例就创建了。
-
懒汉式:“延迟加载”,在需要类中的实例的时候,进行创建。
优缺点:
饿汉式:
-
优点:
-
写法简单
-
在内存中较早加载,使用更方便,更快。
-
是线程安全的
-
-
缺点:
-
创建的类的实例在内存中占用时间较长
-
懒汉式:
-
优点:
-
在需要类的实例的时候进行创建,节省了内存空间。
-
-
缺点:
-
线程不安全。
-