单例设计模式
设计模式:在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
单例设计模式:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例。首先将类的构造器的访问权限设置为private,这样就不能用new在类外部产生类的对象,但在类内部仍可以产生该类的对象。在类的外部,只能调用该类的某个静态方法以返回类内部创建的对象。静态方法只能访问类的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
单例的饿汉式实现
public class SingletonTest {
public static void main(String[] args) {
User user1 = User.getUser();
User user2 = User.getUser();
System.out.println(user1 == user2);
}
static class User{
//1.私有化构造器
private User(){
}
//2.内部创建类的对象
//4.要求此对象的声明也必须是静态的
private static User user = new User();
//3.提供公共的方法,返回类的对象
public static User getUser(){
return user;
}
}
}
单例的懒汉式实现
public class SingletonTest {
public static void main(String[] args) {
User user1 = User.getUser();
User user2 = User.getUser();
System.out.println(user1 == user2);
}
static class User{
//1.私有化构造器
private User(){
}
//2.内部创建类的对象
//4.要求此对象的声明也必须是静态的
private static User user = null;
//3.提供公共的方法,返回类的对象
public static User getUser(){
if (user == null){
user = new User();
}
return user;
}
}
}
饿汉式和懒汉式的区别
- 饿汉式:对象加载时间过长;饿汉式是天然线程安全的;
- 懒汉式:延迟对象的创建;
单例设计模式应用场景
-
网站的计数器
-
应用程序的日志应用
-
数据库连接池
-
读取配置文件的类
-
Application