设计模式/创建型设计模式
简述
采用一定的方法保证在整个软件系统中,一个类只能存在一个对象实例,
并且该类只提供一个访问其对象实例的方法(静态方法)。
⚠️注意
- 单例类只能有一个实例
- 单例类必须自己创建自己唯一实例
- 单例类必须给所有其他对象提供这一实例
1 2 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; }
|