1.单例设计模式:保证类在内存中只有一个对象。
2.如何保证类在内存中只有一个对象?
(1)控制类的创建,不让其他类来创建本类的对象
(2)在本类中定义一个本类的对象,Singleton s;
(3)提供公共的访问方式 public static Singleton getInsatnce(){return s}
-----------------------------饿汉式------------------------
package cn.zzu.Single;
public class Demo1_singleton {
public static void main(String[] args) {
/* Singleton s=Singleton.singleton; //成员变量被私有,不能通过类名调用
Singleton s2=Singleton.singleton;
System.out.println(s==s2);*/
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
System.out.println(s1==s2);
}
}
class Singleton{
//1,私有构造方法,其他类不能使用访问该构造方法
private Singleton() {
}
//2,创建本类的对象
private static Singleton singleton=new Singleton();
//3,对外提供共有的访问方法
public static Singleton getInstance() {
return singleton;
}
}
----------------------------懒汉式---------------------------------
/*
* 懒汉式(先声明,需要的时候再常见对象)
*/
class Singleton{
//1,私有构造方法,其他类不能使用访问该构造方法
private Singleton() {
}
//2,声明一个引用
private static Singleton singleton;
//3,对外提供共有的访问方法
public static Singleton getInstance() {
if(singleton==null) {
//线程1等待,然后线程2进来,等线程1执行后,线程2也执行,就创建了两个对象
singleton=new Singleton();
}
return singleton;
}
}
饿汉式和懒汉式的区别
1.饿汉式是空间换时间,懒汉式是时间换空间
2.多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
class Singleton{
//1,私有构造方法,其他类不能使用访问该构造方法
private Singleton() {
}
//2,声明一个引用
public static final Singleton singleton=new Singleton();
}