单例指的是在整个过程中都只创建一个对象。它实现的方法是使构造方法私有化、而提供另一个静态的返回对象的方法。这样,在创建对象时,就可以用类.方法创建。它分为懒汉式与饿汉式两种。
- 懒汉式
懒汉式指的是只有调用时才开始创建对象。它依赖一个判断完成。
public class Phone {
static Phone phone;//初始化时,创建静态变量
private Phone() {//私有化构造方法
}
public static Phone getPhone() {//静态方法返回对象
if(phone==null) {当没有创建时,创建一个对象,否则,不创建
phone=new Phone();
}
return phone;
}
}
- 饿汉式
不用调用就开始创建,调用时直接返回已经创建的对象就行。
public class Computer {
static Computer computer = new Computer();//创建一个对象
private Computer() {//私有化构造方法,其他类无法调用创建对象
System.out.println("this is computer constract");
}
public static Computer getComputer() {//创建静态方法,类名调用方法返回对象
return computer;
}
}
调用输出:
public class Test {
public static void main(String[] args) {
Phone p = Phone.getPhone();
p = null;
System.out.println(p);
Phone p1 = Phone.getPhone();
System.out.println(p1);
if(p==p1) {
System.out.println("同一对象");
}
Computer com1 = Computer.getComputer();
Computer com2 = Computer.getComputer();
if(com1==com2) {
System.out.println("是同一对象");
}
}
}
输出结果:
com.hisoft.java.bean.Phone@70dea4e
com.hisoft.java.bean.Phone@70dea4e
同一对象
this is computer constract
是同一对象
总结:
无论懒汉还是饿汉都需要(初始化时创建)一个静态的相应类型变量(以便存放对象),私有化构造方法(这样无法被其他类调用创建对象),一个公有静态方法(被类名调用返回对象)来完成。