1.概述
1.1定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
1.2 优缺点
优点:减少内存开销,避免了对资源的多重占用;
缺点:扩展困难,扩展只能修改代码;
1.3 使用场景
要求生成唯一序列号的环境;
整个项目需要一个共享访问点或共享数据;
创建一个对象需要消耗资源过多;
需要定义大量的静态常量和静态方法的环境,可以采用单例(也可直接使用static声明)
2 代码实例
/**
* @author chiangtaol
* @date 2020-11-17
* @describe 单例模式测试类
*/
public class IronMan {
private static Object lock = new Object();
private static volatile IronMan ironMan = null;
private IronMan() {
// 我心中只有一个钢铁侠
}
// 对外提供获取实例方法
public static IronMan getIronMan() {
if (null == ironMan) {
synchronized (lock) {
if (null == ironMan) {
ironMan = new IronMan();
}
}
}
return ironMan;
}
}
单例模式可以简单拓展,比如规定某个对象有固定个数的实例。
/**
* @author chiangtaol
* @date 2020-11-17
* @describe 固定数量实例测试类
*/
public class Captain {
private static final int captainNumber = 2;
private static final String principalName = "正队长";
private static final String assistantName = "副队长";
private static List<Captain> list = new ArrayList<>();
private String name;
private Captain(String name){
// 队长可以有两个,一个正,一个副
this.name = name;
}
static {
list.add(new Captain(principalName));
list.add(new Captain(assistantName));
}
public static Captain getCaption(){
Random random = new Random();
return list.get(random.nextInt(captainNumber));
}
public void say(){
System.out.println(name+"在此");
}
}