java 设计模式(一)

1.单例模式

单例(Singleton)模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点

应用场合:网站计数器、工具类等

作用:保证整个应用程序中的某个实例(创建对象)有且只有一个

类型:饿汉模式、懒汉模式

饿汉模式:

由于创建的实例只有一个,则需要去修改该类的默认构造方法

1.将构造方法私有化,不允许外部直接创建对象

2.创建类的唯一实例(为保证在外部可以访问,则需要static修饰符)

3.为保证其实例的安全性,需要把类的唯一实例私有化,在提供一个公开的获取实例的方法

在考虑的单利模式加载方式的时候,我们需要考虑其加载方式(按照第一种加载方式,就是当类加载时,已经在加载,其模式为饿汉模式)

懒汉模式:

1.将构造方法私有化,不允许外部直接创建对象

2.声明类的唯一实例(使用private static 进行修饰)

3.提供获取实例的方法(使用public static 进行修饰,由于其第二步的时候,只是声明了实例,没有进行实例化,当用户去获取时,获取到的实例为空。)

4.修改获取实例的方法(在提供获取实例的方法中,做一个实例的判断,为空,创建一个实例,否则,直接获取实例)

两种模式的区别:

饿汉模式的特点时在加载类时比较快,但运行时获取对象速度比较快(线程安全)

懒汉模式的特点时在加载类时比较慢,但运行时获取对象速度比较慢(线程不安全)

问题:为什么说懒汉模式是线程不安全的?

解决方法:有多个线程同时进入 if (singleton2 == null) {…} 语句块的情形发生。当这种这种情形发生后,该单例类就会创建出多个实例,违背单例模式的初衷。此刻可以在将方法体使用synchronized进行修饰.

猜你喜欢

转载自blog.csdn.net/qq_36581817/article/details/80864732