-
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
-
-
单例类只能有一个实例。
-
单例类必须自己创建自己的唯一实例。
-
单例类必须给所有其他对象提供这一实例。
-
-
如何实现通过饿汉式实现单例模式
- 好处:线程安全
- 坏处:创建类的时候就创建对象,对象加载时间过长,会浪费内存。
public class test { @Test public void test1() { Chinese ch1 = Chinese.getChinese();// 通过方法获得对象1 Chinese ch2 = Chinese.getChinese();// 通过方法获得对象2 // 测试对象地址是否一致 System.out.println(ch1 == ch2);/* true */ } } class Chinese { // 1.私有化构造器,让外部不能创建对象 private Chinese() { } // 2.内部创建静态私有化的类的唯一对象,后续可以通过静态的类的方法来调用对象。 private static Chinese chinese = new Chinese(); // 3.提供静态的公共方法来调用对象。类外部可以通过类名直接调用。 public static Chinese getChinese() { return chinese; } } -
如何通过懒汉式是实现单例模式
- 好处:延迟对象创建。
- 坏处:目前写法线程不安全。
public class test { @Test public void test1() { Chinese ch1 = Chinese.getChinese();// 通过方法获得对象1 Chinese ch2 = Chinese.getChinese();// 通过方法获得对象2 // 测试对象地址是否一致 System.out.println(ch1 == ch2);/* true */ } } class Chinese { // 1.私有化构造器,让外部不能创建对象 private Chinese() { } // 2.声明当前私有静态的类的对象,没有初始化 private static Chinese chinese = null; // 3.提供静态的公共方法来调用对象。类外部可以通过类名直接调用。 public static Chinese getChinese() { // 如果对象从未调用就重新创建,否则就直接返回对象 if (chinese == null) { chinese = new Chinese(); } return chinese; } } -
个人理解:
- 大家都要喝水,但是没必要每人家里都打一口井是吧,通常的做法是整个村里打一个井就够了,大家都从这个井里面打水喝。
常用场景:
- 封装一些常用的工具类,保证整个应用常用的数据统一。
- 保存一些共享数据在内存中,其他类随时可以读取。
- 共享常用且唯一的数据,和静态方法、静态属性有点相似。