基础知识:
1. 单实例分为饿汉式和懒汉式,两者使用的场景略有不同,也即是我们经常讨论的时间和空间的代价抉择问题,这个应根据具体的情况而定;
理论误区:
1.单实例类里面不应有非常量的私有变量,有即便也是常量;
2.单例模式只是为了节省资源;
重新认识:
1.单实例里面可以有其它的私有变量,特别是和其它设计模式结合使用的时候更为普遍;
2.使用单例模式是可以达到节省资源的目的,但是单例模式的意图不只是为了节省资源,如果仅仅为了节省资源就使用单例模式的话可能造成单例模式的滥用。单例模式是为了确保在整个应用期间只有一个实例,以达到用户的特定的使用目的。比如windows操作系统里,有多个线程要同时进行文件创建、打开、修改一个文件的操作时,就用到单例模式设计文件管理器。所有的文件操作都必须同个这个唯一的实例来进行文件操作,避免的混乱的情况,也即单实例可以保证我们做某些事件的有序性。
模式缺陷:
1.扩展性差;
2.破坏类结构;
3.内存溢出等潜在问题;
适用场景:
1.控制资源的使用,通过线程同步来控制资源的并发访问;(日志类,工具类等)
2.控制实例产生的数量,达到节约资源的目的。(一般用法)
3.作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。(比如数据库的链接实例)