+ 即使单例的生命周期只有一个请求内,照样能有很好的节省内存作用(比如 IP 库、拼音表之类的场景,单个实例很可能占用大量内存,一次请求很可能大量涉及调用,单例效果明显) + 同理,除了内存,还节省其它各种资源,比如 mysql 连接数, redis 连接数,句柄数等等,另外还节省初始化的开销 + 单例伴随工厂,对代码可读性、可测试性等都是提升 + 单例可以实现维护统一状态,比如说单例一个 mysql 连接,就可以在实例里维护 db 请求次数、总耗时什么的
3. 最后, db 连接、 redis 连接之类的,往往还会通过“持久连接” persistent connection 实现跨请求的资源复用