本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,其有哪些使用场景,在使用时要注意什么。
1.单例模式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点
主要解决:一个全局使用的类频繁的创建于销毁
什么时候使用:当你想控制实例数目,节省系统资源的时候
如何解决 :判断系统是否是否已经有这个单例,如果有则返回,如果没有,则创建
结构图:
关键代码:构造函数式私有的
应用实例:1.一个党只能有一个主席.2.Windows是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。3.一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。
优点:1.在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存) 2.避免对资源的多重占用(比如写文件操作)
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,儿不关心外面怎么样来实例化
使用场景:1.要求生产唯一序列号 2.WEB中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来 3.创建的一个对象需要消耗的资源过多,比如I/O与数据库的连接等
注意事项:getInstance()方法中需要使用同步锁synchronized (Singleton.class)防止多线程同时进入造成instance被多次实例化
设计模式学习总结(1) 单例模式,布布扣,bubuko.com
原文:http://blog.csdn.net/hacke2/article/details/21524415