Java、什么是单例设计模式,单例设计模式举例,单例设置模式和普通的区别

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都会在内存当中重新创建对象

发布了26 篇原创文章 · 获赞 23 · 访问量 1973

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/104611688
今日推荐