设计模式(持续更新)
本文主要是记录java的设计模式在实际工作中的应用案例,或者是对设计模式的个人理解及备忘
一、单例模式Singleton
工作场景(静态类):
- 在外部系统对接中,需要调用外部系统A的接口,但是接口是有身份校验的,需要根据指定账户获取token信息,然后把token放在接口的header中,以鉴权和传递身份信息。
- 这个接口使用十分频繁,如果每次调用接口前,都需要获取token,如果不增加个缓存并且约定过期时间的话,比较耗费网络性能。
- 最后方案:使用静态类解决这个问题,token缓存在单例类
TokenGenerator
中,过期时间TTL和外部系统约定好,其他类如果调用TokenGenerator.getToken()
方法,先判断缓存中的token有没有过期,如果有效,返回缓存中的token,如果过期了,再去外部系统通过接口进行请求。 - 代码如下:
public class TokenGenerator(){private String token;private Date TTL;private String refreshToken(){this.token = HttpClient.get("http://", params);// 更新TTL至过期时间return this.token;}public String getToken(){if(currentTime > TTL){// 如果token过期了,更新token并返回return refreshToken();}else{// 如果没过期。直接返回缓存的tokenreturn this.token;}} }
静态类和单例模式
- 使用完静态类后,发现和单例模式的思想很像,那他们有什么区别?引用下这篇文章的总结:
- 单例模式是面向对象的设计。本质上还是创建对象,调用方法。单例存在的根本就是为了得到对象。
- 静态类是单纯使用方法体,对象没有存在的价值。所以直接使用类名调用,不创建对象。静态类存在是为了快捷方便的使用里面的方法。
- 二者设计目标不同:静态类构造函数没有存在的价值,单例模式需要获取对象,所以必须有构造器,但是私有化。而且可以有非静态的成员。(单例模式推荐使用静态的成员)
- 什么时候该使用单例模式,什么时候使用静态类?参考这篇文章