设计模式之单例模式应用场景篇
应用场景
我们为什么要使用单例模式呢?它有什么好处?
(一)单例模式可以让我们只创建一个对象从而避免了频繁创建对象导致的内存消耗和垃圾回收。
Servlet是单例模式,我们只需要创建一个Servlet,然后接收请求并处理。
spring的bean默认也是单例模式,springMVC是单例模式,所以我们可以发现我们的service层,dao层,web层都是使用单例模式,单例无处不在。
多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
同时mysql,redis等的连接对象使用单例模式。
(二)单例模式的另外一个好处是可以让我们操作同一个共享变量来保证同步。网站的计数器,一般也是采用单例模式实现,来保证其同步。
场景一:RestTemplate
在实际开发中,我們可能会遇到需要调用第三方api接口,如果我们使用的是spring可以用RestTemplate来方便我们去调用第三方接口,引入依赖如下:
可以看到,spring并没有为我们自动创建一个restTemplate对象,我们需要自己去创建对象或者定义一个对象,简单方法:
这样创建对象虽然简单,但是却有两个确定,第一个是如果多个类需要用到就需要创建多个对象,第二个是当我们需要统一配置RestTemplate的时候也是需要全部一起配置(例如我们需要自定义处理器或者转换器,并修改RestTemplate的配置)。
这个时候单例模式的好处就提现出来了,我们可以定义一个类去生成唯一一个对象,然后做统一配置,这样不仅节省了内存的消耗,同时也统一管理了RestTemplate配置。
饿汉式:
private class RestTemplateConfig {
/**
* 单例实例
*/
static final RestTemplate restTemplate= new RestTemplate();
}
private RestTemplateUtils() {
}
/**
* 单例实例
*/
public static RestTemplate getInstance() {
return RestTemplateConfig .restTemplate;
}