定 义:确保一个类只有一个实例,而且自行实例化并向这个系统提供这个类
优 点:
1、单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时
2、单例模式只生成一个实例,减少了系统的性能开销
3、单例模式可以避免对资源的多重占用
4、单例模式可以在系统设置全局的访问点,优化和共享资源访问
使用场景:
1、要求生成唯一序列号的环境
2、在整个项目中需要一个共享访问点和共享数据
3、创建一个对象需要消耗的资源过多,例如访问IO以及数据库等资源
4、需要定义大量的静态常量和静态方法的环境
深刻理解:感觉这种模式没有什么值得利用的地方,但是仔细想想,现在自己系统中的大量静态常量和静态方法Shared则完全可以采用单例
模型,为了确保只能够申明一个对象,将new方法设置为private,那么系统中所有申明为Shared的方法都是可以全局共享
实践经验:
首先来看一个案例,每个朝代皇帝只能够拥有一位,凡是说皇帝那大家就都知道指的谁,那么这个皇帝很定就是唯一的,不允许有第二个的,那么这个可以采取单例模式,说到皇帝那么这个类就能自动的告诉别人我是谁,我能干什么,这对天下所有人都是公开的,唯一的。那么设计出来的UML图如下所示:
仔细想想自己项目中有哪些地方可以弄成单例模式的,现在是将所有的Shared参数以及方法都是放入到BusApp中,通过BusApp.方法名称来共享这些全局变量,为了尽量遵守单一职责原则,将BusApp中的方法与变量按照职责原则分成多个类,实现UML如下图所示:
单例模式的目的主要是为了为了让大家共享数据简单快捷,不用再说讲到皇帝的时候要说**皇帝,例如在家庭讲到爸爸妈妈也不需要说**爸爸,**妈妈,如果是这样那就说明这个家庭存在严重的问题了,在出现单例模式的情况下,一定记得要自己来初始化对象而非让其他对象来初始化,所以new方法一定要设置为private
现在来看一个皇帝与臣子之间的关系,一朝天子一朝臣,很明显就是臣只能每天向一个天子朝拜,那么如何实现?先来看看类图:
先来看看代码:
运行结果如下: