设计模式之单例模式
一、什么是单例模式
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。
许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如
在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对
象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式
简化了在复杂环境下的配置管理。
单例的实现主要是通过以下两个步骤:
1. 将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造
方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;
2. 在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就
返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持
的引用。
二、单例模式的应用场景
举一个小例子,在我们的 windows 桌面上,我们打开了一个回收站,当我们试图再次打开
一个新的回收站时,Windows 系统并不会为你弹出一个新的回收站窗口。,也就是说在整
个系统运行的过程中,系统只维护一个回收站的实例。这就是一个典型的单例模式运用。
继续说回收站,我们在实际使用中并不存在需要同时打开两个回收站窗口的必要性。假如
我每次创建回收站时都需要消耗大量的资源,而每个回收站之间资源是共享的,那么在没有
必要多次重复创建该实例的情况下,创建了多个实例,这样做就会给系统造成不必要的负担,
造成资源浪费。
再举一个例子,网站的计数器,一般也是采用单例模式实现,如果你存在多个计数器,每
一个用户的访问都刷新计数器的值,这样的话你的实计数的值是难以同步的。但是如果采用
单例模式实现就不会存在这样的问题,而且还可以避免线程安全问题。同样多线程的线程池
的设计一般也是采用单例模式,这是由于线程池需要方便对池中的线程进行控制