设计模式:就是根据问题和需求,在大量实践中总结和理论化之后优选的代码结构,编程风格以解决问题的方式。
单列模式:在设计一个类时,该类的实例在整个程序中只有一个实例对象。列如:世界上只有一个月亮。
1、饿汉模式:
public class SinglePattern {
/*
* 1,类的构造方法私有化,不能通过new关键字创建实例
* 2,类的内部创建一个该类的实例,使用静态变量引用该对象
* 3,定义一个静态方法返回该实例对象
* */
//私有构造方法
private SinglePattern() {}
//创建该类的实例对象
private static SinglePattern single = new SinglePattern();
//公开的静态方法,返回该类实例
public static SinglePattern getSingleP() {
return single;
}
}
2、懒汉模式:
public class SinglePattern {
//私有构造方法
private SinglePattern() {}
//创建该类的实例对象
private static SinglePattern single = null;
//公开的静态方法,返回该类实例
public static SinglePattern getSingleP() {
if (single == null){
single = new SinglePattern();
}
return single;
}
}
懒汉单例模式是线程不安全的,多线程情况下有可能存在多个实例,可以通过synchronized关键字来达到线程安全。
1、在getSingleP()方法上加synchronized 关键字
public class SinglePattern {
//私有构造方法
private SinglePattern() {}
//创建该类的实例对象
private static SinglePattern single = null;
//公开的静态方法,返回该类实例
public static synchronized SinglePattern getSingleP() {
if (single == null){
single = new SinglePattern();
}
return single;
}
}
2、通过同步代码块解决
public class SinglePattern {
//私有构造方法
private SinglePattern() {
}
//创建该类的实例对象
private static SinglePattern single = null;
//公开的静态方法,返回该类实例
public static SinglePattern getSingleP() {
if (single == null){
synchronized (SinglePattern.class){
single = new SinglePattern();
}
}
return single;
}
}