单例设计模式:对于某个类来说,只能存在一个对象实例
饿汉式(先创对象)
1、私有化该类的构造器:避免在类外创建对象
2、因为构造器私有化,所以在该类内部创建该类对象
3、声明public、static的返回该类的对象的方法,来让外部类调用这个对象
4、因为无法在外部创建该类的对象,所以这个公共方法必须是静态的,不能是实例方法。而因为这个公共方法是静态的,方法里面不可用非静态结构,所以返回的该类的对象需要是static的
public class Untitled {
public static void main(String[] args) {
Test t1 = Test.m();
Test t2 = Test.m();
System.out.println(t1 == t2); //true
}
}
class Test{
//1/私有化构造器
private Test(){
System.out.println("a");
}
//2、创建该类对象
//5、对象必须是静态的
private static Test t = new Test();
//3、提供返回对象的方法
//4、方法必须是静态的,不能是实例的
public static Test m(){
return t;
}
}
懒汉式(后创对象)
1、私有化该类的构造器
2、声明当前类对象,没有初始化
3、提供公共方法,返回该类的对象
class Untitled {
public static void main(String[] args) {
Test t1 = Test.m();
Test t2 = Test.m();
System.out.println(t1 == t2);
}
}
class Test{
//1/私有化构造器
private Test(){
System.out.println("a");
}
//声明 static 对象,但不创建
private static Test t = null;
//提供 public、static 的返回对象的方法
public static Test m(){
if(t == null)
t = new Test();
return t;
}
}
二者的区别
- 饿汉式:
- 劣:对象加载时间过长
- 优:线程安全
- 懒汉式:
- 劣:线程不安全
- 优:延迟对象的创建
单例模式的应用场景
网站的计数器
应用程序的日志应用
数据库连接池
读取配置文件的类
Application
Windows的 Task Manager(任务管理器)
Windows的 Recycle Bin(回收站)
小结
饿汉式代码
class Test{
private Test(){
}
private static Test t = new Test();
public static Test m(){
return t;
}
}
2924

被折叠的 条评论
为什么被折叠?



