在单例模式中,每个对象只能有一个实例
饿汉模式(在类加载的时候就会创建实例,有可能会浪费):
为了做到只有一个实例,饿汉模式的步骤如下:
1.将构造器私有化
2.在类的内部直接创建对象
3.提供一个公共的static方法,返回创建的对象
public class demo {
public static void main(String[] args) {
girlFriend gf = girlFriend.getGf();
System.out.println(gf);
girlFriend gf1 = girlFriend.getGf();
System.out.println(gf1);
System.out.println(gf==gf1);
}
}
public class girlFriend {
private String name;
private int age;
private girlFriend(String name, int age) {
this.name = name;
this.age = age;
}//私有构造方法,让类外面不能直接new
private static girlFriend gf=new girlFriend("natasha",20);
//静态方法只能调用静态成员,所以要用static修饰
public static girlFriend getGf(){
return gf;
}//因为在类外面不允许创建对象,所以只能通过类来调用,所以返回实例的方法要用static修饰
@Override
public String toString() {
return "girlFriend{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行结果:
girlFriend{name='natasha', age=20}
girlFriend{name='natasha', age=20}
true
懒汉模式:
在要创建实例的时候才创建,缺点是可能会有线程安全问题
public class cat {
private String name;
private int age;
private static cat c;
private cat(String name, int age) {
this.name = name;
this.age = age;
}
public static cat getCat(){
if(c==null){
c= new cat("狸花",3);
}
return c;
}
@Override
public String toString() {
return "cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}