单例模式:保证一个类只产生唯一的一个实例,并提供一个访问它的全局访问点。
单例模式 Singleton
单例模式一般用于某个类有且仅有一个对象,避免产生多个对象消耗过多资源,或者访问 IO
或数据库等资源时。
类图结构
结构解析
只有一个 Singleton
单例类,这个类有几个关键特点:
- 构造函数为
private
- 通过静态方法或者枚举返回单例类对象
- 确保单例类对象有且仅有一个,特别是多线程场景
- 单例类在反序列化时不会重构对象
示例
如下是单例模式的经典用法,饿汉式单例:
1 | // 饿汉式,static,定义时直接初始化 |
多线程中的应用
单例模式在多线程中,有多种实现方式,常见有:饿汉模式,懒汉模式,经典双检锁,枚举实现等。从多线程角度来看,单元素枚举是实现单例模式最佳方法。详细分析参考:Java 多线程并发:单例模式多线程
总结
- 优点
单例类封装了它的唯一实例,在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。 - 缺点
单例模式中没有抽象层,因此单例类的扩展有很大的困难。单例类的职责过重,在一定程度上违背了“单一职责原则”。单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法。
创建型设计模式总结
创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
创建型模式在创建什么,由谁创建,何时创建等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
参考文档
- 大话设计模式
Android
源码设计模式解析与实战- 创建型模式