Java单例模式
1.定义:在整个软件系统中,对某个类只能存在一个对象实例,且该类只提供一个取得其对象实例的方法。
2.实现思路:
让类在一个虚拟机中只能产生一个对象,首先将类的构造器的访问权限设置为private,这样就不能在类的外部通过new操作产生类的对象,但在类的内部仍可以产生该类的对象。因为在类的外部开始无法得到类的对象,只能调用该类的静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,指向类内部产生的该类对象的变量也必须定义为静态的
1.饿汉式—及时加载,随着类的创建,类的唯一实例也创建
public class BankTest {
public static void main(String[] args){
Bank b1=Bank.getInstance();
Bank b2=Bank.getInstance();
System.out.println(b1==b2);
}
}
class Bank{
//类构造器私有化
private Bank(){
}
private static Bank instance=new Bank();
public static Bank getInstance(){
return instance;
}
}
2.懒汉式–需要时在加载,节省内存
public class GirlFriend {
public static void main(String[] args){
}
}
class Girlfriend{
private Girlfriend(){
}
private static Girlfriend instance=null;
public static Girlfriend getInstance(){
if(instance==null){
instance=new Girlfriend();
}
return instance;
}
}
对比->
饿汉式:(优点)写法简单,内存较早加载,使用更方便,更快,线程安全;(缺点)内存占用时间长
懒汉式:(优点)需要的时候创建,节省内存空间;
(缺点)线程不安全