定义
确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
角色
单例类:在单例类内部创建它的唯一实例,并通过静态方法来让客户端可以使用它的唯一实例。 客户端类:通过使用单例类提供的方法,来获取该类的唯一实例,而不是通过实例化的方式获得。
优点
提供了对唯一实例的受控访问
可以节约系统资源,提高系统的性能
缺点
扩展困难(缺少抽象层)
单例类的职责过重
由于自动垃圾回收机制,可能会导致共享的单例对象的状态丢失
适用场景
系统只需要一个实例对象,或者因为资源消耗太大而只允许创建一个对象
客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例
案例
某软件公司承接了一个服务器负载均衡(Load Balance)软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中的多台设备上进行并发处理,提高了系统的整体处理能力,缩短了响应时间。由于集群中的服务器需要动态删减,且客户端请求需要统一分发,因此需要确保负载均衡器的唯一性,只能有一个负载均衡器来负责服务器的管理和请求的分发,否则将会带来服务器状态的不一致以及请求分配冲突等问题。如何确保负载均衡器的唯一性是该软件成功的关键,试使用单例模式设计服务器负载均衡器。