单例模式的使用场景:
1,创建一个对象需要消耗的资源较多,例如,访问IO,访问数据库等资源 2,一个应用中需要共享一个对象数据 3,需要生成唯一序列号;
如何编写一个单例模式呢,步骤如下:
1,将该类的构造器私有化,添加private修饰,这样外部类就无法访问构造函数,无法通过new创建该类实例;private Person(){};
2,提供一个公有静态的方法,并返回该类的实例对象;结构类似这样:
//通常叫懒汉式单例模式
private static Person p = null;
public static synchronized Person getIn() {
if (p == null) {
p = new Person();
}
return p;
}
//通常叫饿汉式的单例模式
private static Person p2 = new Person();
public static Person getIn2() {
return p2;
}
上面两种方式,创建该对象的时机显然不同,一个是调用getIn方法,变量引用p为空时才创建,另一个是类加载的时候就创建了。
第一种方式:在并发量比较大时,会出现线程同步问题,需要用同步方法或同步代码处理;
第二种方式:在并发量比较大时,无线程同步问题的担忧;
小王在开发中对第一种方式(懒汉式)使用比较多;但是在设计模式之禅这本书