单例模式
- 私有化类的构造器
- 声明或创建类的对象
- 提供公共的静态方法,返回类的对象
// 饿汉式
calss Bank(){
// 1.私有化类的构造器
private Bank(){
}
// 2.内部创建类的对象
// 要求此对象也必须声明为静态的
private static Bank instance = new Bank();
// 3.提供公共的静态方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
// 懒汉式
calss Bank(){
// 1.私有化类的构造器
private Bank(){
}
// 2.声明当前类的对象
// 此对象也必须声明为static的
private static Bank instance = null;
// 3.提供公共的静态方法,返回类的对象
public static Bank getInstance(){
if(instance == null){
instance = new Bank();
}
return instance;
}
}
区分饿汉式与懒汉式
饿汉式:
>
>
> 坏处:对象加载时间过长
>
>
> 好处:是线程安全的
懒汉式:
>
>
>好处:延迟对象的创建
>
>
> 坏处:上述的写法是不安全的。
线程安全的懒汉式
// 懒汉式
calss Bank(){
// 1.私有化类的构造器
private Bank(){
}
// 2.声明当前类的对象
// 此对象也必须声明为static的
private static Bank instance = null;
// 3.1 提供公共的静态同步方法,返回类的对象
public static synchronized Bank getInstance(){
if(instance == null){
instance = new Bank();
}
return instance;
}
// 3.1 提供公共的静态同步方法,返回类的对象
public static Bank getInstance(){
// 效率稍差
synchronized(Bank.class){
if(instance == null){
instance = new Bank();
}
return instance;
}
// 方式二 效率更好
if (instance ==null){
synchronized(Back.class){
instance = new Back();
}
}
return instance;
}
}