单例设计模式
/**
* 单例设计模式:所谓类的单例设计模式,就是采取一定的方法保证在整个的 软件系统中,
* 对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
* @author Lhk
*
*单例模式饿汉式实现
*
*/
public class Singletons_Test {
public static void main(String[] args) {
Bank bank1=Bank.getBank();
Bank bank2=Bank.getBank();
System.out.println(bank1==bank2);
}
}
class Bank{
//1.私有化类的构造器
private Bank(){
}
//2.类内部创建类对象
//4.要求此对象必须声明为静态的
private static Bank bank = new Bank();
//3.提供公共的静态方法,返回类对象
public static Bank getBank(){
return bank;
}
}
/**
* 单例设计模式的懒汉式实现
* @author Lhk
*
*/
public class Singeltons_Test2 {
public static void main(String[] args) {
Order order1=Order.getInstance();
Order order2=Order.getInstance();
System.out.println(order1==order2);
}
}
class Order{
//1.私有化类的构造器
private Order(){
}
//2.声明当前类对象,没有初始化
//4.要求此对象必须声明为静态的
private static Order instance=null;
//3.提供公共的静态方法,返回类对象
public static Order getInstance(){
if(instance==null){
instance=new Order();
}
return instance;
}
}
区分饿汉式和懒汉式
饿汉式:
坏处:对象加载时间过长。好处:饿汉式是线程安全的
懒汉式:好处:延迟对象的创建。
目前的写法坏处:线程不安全。
/**
* 使用同步机制解决单例设计模式懒汉式的线程安全问题
* @author Lhk
*
*/
public class Singeltons_Test3 {
}
class Bankk{
private Bankk(){};
private static Bankk bank=null;
public static Bankk getBankk(){
//方式一:效率较差
/*synchronized(Bankk.class){
if(bank==null){
bank=new Bankk();
}
return bank;
}*/
//方式二:
if(bank==null){
synchronized(Bankk.class){
if(bank==null){
bank=new Bankk();
}
}
}
return bank;
}
}