行为目的:
保证类只有也只能有一个实例,并提供一个全局访问点。
问题起源:
在实际应用中,对于某些类,只拥有一个实例是非常重要的。比如打印机系统,通常设备只有一个打印机。手机只有一个蓝牙设备,系统只有一个文件管理系统和界面管理器等。对于这样的情况,在创建类实例时,就要求该类只能有一个实例。
使用情况:
要求只能有一个实例的情况。
UML结构框图:
UML框图说明:
使用说明:
如何有效的实现单例,最佳的办法就是类不外不提供公有的构造器且把默认构造器也设置为私有的,在类内部提供公有的静态工厂方法生成该类的实例,并只生成一次,类对自身实例提供缓存。
模式优缺点:
1)客户代码只能访问单例类,无权控制单例类的创建。2)单例类只有一个实例,降低使用内存空间。
实现细节:
1)请严格确定需求是否需要单例。2)在设计单例类子类时,请确保子类与父类都实现单例模式。
示例代码:
Java类库中的使用:
关联模式:
经常用来创建组合结构,与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多领域的知识。