- package cn.itheima;
- /*
- 单例设计模式:解决一个类在内存中只存在一个对象
- 体现方式:
- 1. 构造函数私有化
- 2. 在类中创建一个本类对象
- 3. 提供一个方法获取该对象
- */
- //饿汉式:先初始化对象,类一进内存就创建好了对象
- class HungrySingleton{
-
- private static final HungrySingleton s = new HungrySingleton();
- private HungrySingleton(){}
-
- public static HungrySingleton getInstance(){
-
- return s;
- }
- }
- /*
- 懒汉式:对象是方法被调用时才初始化,也叫做对象的延迟加载
- 懒汉式考点:
- 1. Q:懒汉式和饿汉式有什么不同 A:懒汉式的特点在于实例延迟加载
- 2. Q:懒汉式延迟加载有什么问题 A:如果多线程访问会出现安全问题
- 3. Q:安全问题怎么解决 A:加同步代码块或同步函数解决,但有可能程序低效,可以采用双重判断解决效率问题
- 4. Q:加同步使用的锁是哪一个 A:该类所属的字节码文件对象,LazySingleton.class
- */
- class LazySingleton{
-
- private static LazySingleton s = null;
- private LazySingleton(){}
-
- public static LazySingleton getInstance(){
-
- if (s==null){
-
- synchronized(LazySingleton.class){
-
- if (s==null){
-
- s = new LazySingleton();
- }
- }
- }
-
- return s;
- }
- }
- class SingletonDemo{
-
- public static void main(String[] args){
-
- HungrySingleton s = HungrySingleton.getInstance();
- HungrySingleton s1 = HungrySingleton.getInstance();
-
- LazySingleton s3 = LazySingleton.getInstance();
- LazySingleton s4 = LazySingleton.getInstance();
-
- System.out.println(s==s1);
- System.out.println(s3==s4);
- }
- }
复制代码
|
|