- 什么是单例模式
- 单例模式的例子
- 单例模式的应用场景
- 单例模式的优缺点
- 闲言碎语
什么是单例模式
在了解单例模式之前可以先考虑有个问题,当我们在将电脑上不要的内容删除到回收站的时候,不管我们删除那个磁盘的内容,他总是进入的是同一个回收站.再者,在程序中进行数据库连接是一个十分常见的操作.而我们对数据库连接的操作都是会封装在一个类中,众所周知,程序在创建一个对象的过程中是十分消耗系统资源的.因此,如果我们将该类采用单例模式进行开发就可以极大的提高系统的运行效率.下面来说说什么是单例模式:
单例模式:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例.(来源于百度百科)
注意的地方:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
单例模式的例子
package com.designPattern.single;
/**
* 回收站(单例模式的核心)
*/
public class Recyle {
/**
* 此处将Recyle实例化的话为饿汉式,eg:Recyle recyle = new Recyle();
*/
private static Recyle recyle;// 对外提供自身的实例
// 必须保证构造函数私有,防止外部实例化该函数
private Recyle() {
}
// 对外提供实例的方法
public static synchronized Recyle getInstance() {
if (recyle == null) {
recyle = new Recyle();// 此为懒汉式.线程安全,去掉synchronized线程不安全
}
return recyle;
}
}
测试的例子
package com.designPattern.single;
import org.junit.Test;
public class TestCase {
@Test
public void test(){
Recyle r1=Recyle.getInstance();
Recyle r2=Recyle.getInstance();
if(r1==r2){
System.out.println("为同一个实例");
}else{
System.out.println("不是一个实例");
}
}
}
结果:
单例模式的应用场景
1、一个党只能有一个主席。
2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
4、要求生产唯一序列号。
5、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
6、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
单例模式的优缺点
优点:内存中只有一个实例,减少了内存开销.避免了资源的重复占用.
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化.
单例模式尽管很简单,但是在使用的场景是非常普遍的.而且它还有各种变种写法!