设计模式/创建型设计模式
简述
采用一定的方法保证在整个软件系统中,一个类只能存在一个对象实例,
并且该类只提供一个访问其对象实例的方法(静态方法)。
⚠️注意
- 单例类只能有一个实例
- 单例类必须自己创建自己唯一实例
- 单例类必须给所有其他对象提供这一实例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 
 | @Slf4j
 public class HungryCat extends Cat {
 private static HungryCat hungryCat = new HungryCat();
 
 private HungryCat() {
 log.debug("饥饿的猫猫");
 }
 
 
 
 
 
 
 
 public static HungryCat getInstance() {
 return hungryCat;
 }
 }
 
 @Slf4j
 public class LazyCat extends Cat {
 private static LazyCat lazyCat;
 
 private LazyCat() {
 log.debug("懒懒的猫猫");
 }
 
 
 
 
 
 
 
 public static LazyCat getInstance() {
 if (lazyCat == null) {
 lazyCat = new LazyCat();
 }
 return lazyCat;
 }
 
 
 
 
 
 
 
 public static synchronized LazyCat getSyncInstance() {
 if (lazyCat == null) {
 lazyCat = new LazyCat();
 }
 return lazyCat;
 }
 
 
 
 
 
 
 
 public static LazyCat getSyncSuperiorInstance() {
 if (lazyCat == null) {
 synchronized (LazyCat.class) {
 lazyCat = new LazyCat();
 }
 }
 return lazyCat;
 }
 
 
 
 
 
 public static LazyCat getSyncAdvanceInstance() {
 if (lazyCat == null) {
 synchronized (LazyCat.class) {
 if (lazyCat == null) {
 lazyCat = new LazyCat();
 }
 }
 }
 return lazyCat;
 }
 }
 
 @Slf4j
 public class InnerClassCat extends Cat {
 private InnerClassCat() {
 log.debug(“内部的猫猫”);
 }
 
 
 
 
 
 
 public static InnerClassCat getInstance() {
 return Inner.innerClassCat;
 }
 
 private static class Inner {
 private static InnerClassCat innerClassCat = new InnerClassCat();
 }
 }
 
 
 enum CarBean {
 carBean;
 }
 
 |