设计模式
单例设计模式
单例模式可分为饿汉式和懒汉式,创建方法如下:
//饿汉式
class Bank {
//1.私有化构造器
private Bank() {
}
//2.内部创建类的对象
//4. 要求此对象也必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的方法,返回类的对象
public static Bank getInstance() {
return instance;
}
}
//懒汉式
class Shop {
//1.私有化类的构造器
private Shop() {
}
//2. 声明当前类的对象,没有初始化
private static Shop instance = null;
//3. 声明public static 的返回当前类对象的方法
public static Shop getInstance() {
if (instance == null) {
instance = new Shop();
}
return instance;
}
}
区分饿汉式和懒汉式
- 饿汉式
好处:对象加载时间过长
坏处:线程安全 - 懒汉式
好处:延迟对象的创建
坏处:目前的写法线程不安全,到多线程内容时,再修改为线程安全的。
线程安全的懒汉式
package org.example2;
public class ShopTest {
}
class Shop{
private Shop(){
}
private static Shop instance = null;
//方式二:同步方法,在方法前加synchronized,效率较差
public static Shop getInstance() {
//方式一:同步代码块,效率较差
// synchronized (Shop.class) {
// if (instance == null) {
// instance = new Shop();
// }
// return instance;
// }
//方式三:同步代码块,效率较高
if (instance == null){
synchronized (Shop.class){
if (instance == null) {
instance = new Shop();
}
}
}
return instance;
}
}