设计模式(三)--创建类模式

1.书本链接:https://www.kancloud.cn/sstd521/design/193489

本文引用博客:https://blog.csdn.net/zhengzhb/article/details/7331369

1.单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
做法

  • 私有的构造方法:private Singleton(){}
  • 指向自己实例的私有静态引用:private static Singleton singleton = new Singleton();//这里有new是饿汉,没new是懒汉
  • 以自己实例为返回值的静态的公有的方法:public static Singleton getInstance(){return singleton;}

注意:在java中,饿汉式单例要优于懒汉式单例。C++中则一般使用懒汉式(延迟加载)单例。懒汉式的单例模式是线程不安全的,因为要动态的new:http://blog.sina.com.cn/s/blog_75247c770100yxpb.html#bsh-24-289558518,在那个方法前面加一个Synchronized就OK了,同步的代价必然会一定程度的使程序的并发度降低,上面的写法一方面实现了Lazy-Load,另一个方面也做到了并发度很好的线程安全,但初始化是需要耗费时间的,但是这个对象的地址其实已经存在了。此时线程B也执行到了第九行,它判断不为空,于是直接跳到15行得到了这个对象。但是,这个对象还没有被完整的初始化!这种方法使用内部类来做到延迟加载对象,在初始化这个内部类的时候,JLS(Java Language Sepcification)会保证这个类的线程安全。这种写法最大的美在于,完全使用了Java虚拟机的机制进行同步保证,没有一个同步的关键字

猜你喜欢

转载自blog.csdn.net/Hu_yilang/article/details/89449317