单例模式Singleton 作用:保证整个应用程序中某个实例有且只有一个 类型:饿汉模式和懒汉模式
首先创建一个Pattern类,什么都不写。
| |
再新建一个测试Test类
| |
控制台输出结果
| |
可以看出其三次输出的地址不相同,说明此时创建了三个不同的实例
将构造方法私有化,不能被外部直接创建对象,此时在Test类中就不能直接实例化对象了,然后在Pattern类中创建唯一的实例,并且将其变为类的成员(static将方法变为类所有),这样在Test类中可以直接使用;类名.成员名来获取对象。此时Pattern类如下:
| |
Test类:
| |
控制台输出结果:
| |
可以看出三者的地址指向一处,说明此时只创建了一个实例。
接下来为了安全,需要将对Pattern类进行封装(面向对象思想),此时我们的Pattern类就变成了如下内容
| |
Test类修改内容并输出,结果同上
| |
上面这种方法为饿汉模式,意思大致为:static为静态修饰符,当Pattern类加载时它就会创建一个唯一的实例,不管后面有没有调用,都随类一起产生。
LazyPattern类
| |
类中只是声明了一个唯一的实例,并没有创建,只有当用户获取实例时才去判断这个实例是否为空
| 饿汉模式 | 懒汉模式 | |
|---|---|---|
| 区别 | 加载时速度慢,运行时获取对象比较快 | 加载速度快,运行时获取对象速度比较慢 |
| 线程 | 安全 | 不安全 |
单例模式Singleton 作用:保证整个应用程序中某个实例有且只有一个 类型:饿汉模式和懒汉模式
首先创建一个Pattern类,什么都不写。
| |
再新建一个测试Test类
| |
控制台输出结果
| |
可以看出其三次输出的地址不相同,说明此时创建了三个不同的实例
将构造方法私有化,不能被外部直接创建对象,此时在Test类中就不能直接实例化对象了,然后在Pattern类中创建唯一的实例,并且将其变为类的成员(static将方法变为类所有),这样在Test类中可以直接使用;类名.成员名来获取对象。此时Pattern类如下:
| |
Test类:
| |
控制台输出结果:
| |
可以看出三者的地址指向一处,说明此时只创建了一个实例。
接下来为了安全,需要将对Pattern类进行封装(面向对象思想),此时我们的Pattern类就变成了如下内容
| |
Test类修改内容并输出,结果同上
| |
上面这种方法为饿汉模式,意思大致为:static为静态修饰符,当Pattern类加载时它就会创建一个唯一的实例,不管后面有没有调用,都随类一起产生。
LazyPattern类
| |
类中只是声明了一个唯一的实例,并没有创建,只有当用户获取实例时才去判断这个实例是否为空
| 饿汉模式 | 懒汉模式 | |
|---|---|---|
| 区别 | 加载时速度慢,运行时获取对象比较快 | 加载速度快,运行时获取对象速度比较慢 |
| 线程 | 安全 | 不安全 |