8.1 设计模式
设计模式:解决某一种问题的思想,是一种行之有效的解决方法。
23种模式。
8.2 单例设计模式-思想
解决的问题:保证一个类的对象在内存中的唯一性。
应用场景:多个程序都在操作同一个配置文件时,需要程序A操作后结果,程序B要知道并继续基于A操作后的结果进行操作。
前提:数据都存储在配置文件对象中,要求程序A和程序B操作的配置文件对象是同一个。
思路:
- 问题是其他程序都可以通过new创建该类的对象,无法控制数量。所以,不让其他程序new不就行了吗。
- 那第一步的问题也就产生了,那其他程序不就没有对象了吗?干脆,在本类中自己new一个本类对象。这样的好处是,不让别的程序new,自己new,可以实现数量控制。
- 对外提供让其他程序获取该对象的方式!
步骤:
- 不让其他程序new该类对象?可以将类中的构造函数私有化。
- 在本类中new一个对象。
- 定义一个方法返回该对象。
代码体现
public class Single {
private Single(){} //1.构造函数私有化
private static Single s = new Single(); //2.创建一个本类对象
public static Single getInstance(){ //3.定义一个方法返回该对象,让该程序可以获取到。
return s;
}
}
class testSingle{
public static void main(String[] args){
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();//s1和s2指向同一个对象
}
}
8.3 单例设计模式-代码细节
static Single getInstance(){ //3.定义一个方法返回该对象,让该程序可以获取到。
return s;
}
之所以定义一个方法访问,就是为了可控。
8.4 单例设计模式-懒汉与饿汉
第一种,饿汉式。
在加载类的时候就创建对象(static的原因)。
public class Single {
private Single(){}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
另一种形式,懒汉式。
延迟加载方式,在调用getInstance时候才创建对象,且只会创建一次,保证对象唯一性。
public class Single {
private static Single s = null;
private Single(){}
public static Single getInstance(){
if(s==null)
s = new Single();
return s;
}
}
8.4 单例设计模式-应用
呼唤超人。