Java、什么是单例设计模式,单例设计模式举例,单例设置模式和普通的区别
保证一个类仅有一个实例,提供一个访问它的全局访点。
适用性
1.当类只能有一例而且客户可以从一个众所周知的访问点访问它时。
2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
参与者
Singleton
定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。
可能负*创建它自己的唯一实例。
单利设计模式举例子:
//定义一个只能初始化一次的类
public class Stu {
private Stu() {//私有化类的无参构造器,外部无法new该类
}
//在内部实例化该对象
private static Stu stu = new Stu();//外部类在使用该类时直接类名点方法即可加载该类的对象吗,静态区域只能加载一次
public static Stu getInstance() {//通过调用该方法来返回该类的对象
return stu;
}
private int i = 0;
@Override
public String toString() {
// TODO Auto-generated method stub
return "stu:"+i++;
}
}
定义一个普通类
public class Teacher {
private int i = 0;
@Override
public String toString() { // TODO Auto-generated method stub
return "Teacher" + i++;
}
}
分别实例化这两个类
public class StuTest {
public static void main(String[] args) {
Stu stu1 = Stu.getInstance();
Stu stu2 = Stu.getInstance();
Stu stu3 = Stu.getInstance();
Stu stu4 = Stu.getInstance();
//因为当打印子类对象的时候会自动调用父类的toString方法,由于子类重写了父类的方法所以打印的时候调用的是子类的toString方法
System.out.println(stu1);
System.out.println(stu2);
System.out.println(stu3);
System.out.println(stu4);
Teacher tea = new Teacher();
Teacher tea1 = new Teacher();
Teacher tea2 = new Teacher();
Teacher tea3 = new Teacher();
System.out.println(tea);
System.out.println(tea1);
System.out.println(tea2);
System.out.println(tea3);
}
}
输出结果:
stu:0
stu:1
stu:2
stu:3
Teacher0
Teacher0
Teacher0
Teacher0
证明:stu每次调用的是同一个对象,只在内存当中初始化一次,而Teacher每new都会在内存当中重新创建对象