这两组代码有啥区别,该怎么处理
这两组代码有啥区别
CodeA:
CodeB:
同样是单例,有啥区别,各有啥好处?
------解决方案--------------------
对于程序员来讲就是 一个将MyManaager构造方法暴露出来,另一个被hide了,但是对于用户来讲codeA可能可读性比较好。内部实现机制我觉得一样。单例么,思路都是一样的
------解决方案--------------------
CodeA是线程安全的单例模式
CodeB不是线程安全的,在多线程可能会产生多个实例
------解决方案--------------------
第一个就是引入类的时候对象就存在,没有给程序员控制对象何时产生的权利。
第二个可以在程序员真正需要改对象时才创建出来。
各有各的优点。
------解决方案--------------------
两种单例模式,分别是饿汉式和懒汉式
------解决方案--------------------
建议使用饿汉式的 虽然浪费了效率 但是不会出异常 懒汉式效率好 但是需要加锁 不然会出异常的
CodeA:
- Java code
public class MyManager{ private static class MyManagerContainer{ private static MyManager instance = new MyManager(); } public static MyManager getInstance(){ return MyManagerContainer.instance; } private MyManager(){ } }
CodeB:
- Java code
public class MyManager{ private static MyManager instance; public static getInstance(){ return instance; } public MyManager(){ if(instanct!=null){ throw new IllegalStateException("Already exist"); } instance = this; } }
同样是单例,有啥区别,各有啥好处?
------解决方案--------------------
对于程序员来讲就是 一个将MyManaager构造方法暴露出来,另一个被hide了,但是对于用户来讲codeA可能可读性比较好。内部实现机制我觉得一样。单例么,思路都是一样的
------解决方案--------------------
CodeA是线程安全的单例模式
CodeB不是线程安全的,在多线程可能会产生多个实例
------解决方案--------------------
第一个就是引入类的时候对象就存在,没有给程序员控制对象何时产生的权利。
第二个可以在程序员真正需要改对象时才创建出来。
各有各的优点。
------解决方案--------------------
两种单例模式,分别是饿汉式和懒汉式
------解决方案--------------------
建议使用饿汉式的 虽然浪费了效率 但是不会出异常 懒汉式效率好 但是需要加锁 不然会出异常的