一、 单例设计模式:所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
二、区分饿汉式和懒汉式
饿汉式:直接造好对象
-
坏处:对象加载时间过长
-
好处:饿汉式是线程安全的
懒汉式:用到才造对象
-
好处:延迟对象的创建
-
目前的写法坏处:线程不安全 --> 到多线程内容时,再修改
应用场景:网站计数器、应用程序的日志应用、数据库连接池、Application、单例模式
三、代码
1.饿汉式
class Bank{
//1.私有化构造器
private Bank(){
}
//2.内部创建类的对象
//要求此对象必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
2.懒汉式
class Order{
//1.私有化构造器
private Order(){
}
//2.声明当前类的对象,没有初始化
private static Order instance = null;
//3.声明public、static的返回当前对象的方法
public static Order getInstance(){
if(instance == null){
instance = new Order();
}
return instance;
}
}
四、修改后的懒汉式,解决了线程安全问题(涉及到多线程)
/*
使用同步机制,将单例模式中的懒汉式改写为线程安全的
*/
public class BankTest {
}
class Bank{
private Bank(){}
private static Bank instance = null;
public static Bank getInstance(){
//Ctrl + Alt + t 快捷键快速生成synchronized
//方式一:效率稍差
synchronized (Bank.class) {
if (instance == null){
instance = new Bank(); //有可能会阻塞,导致线程的安全问题
}
}
return instance;
}
}
方式二
if (instance == null) {
synchronized (Bank.class) {
if (instance == null) {
instance = new Bank();
}
}
}
return instance;
}