生产中会遇到需要 密集资源型对象, 即资源集中在一个对象中,那么用户代码就不能一直保持着获得的所有资源,而应该在需要时就向资源供给方进行借贷,使用完毕之后立即归还。
对于具有GC的程序设计语言,它仅仅实现了内存资源的自动回收,而对于诸如文件IO,数据库连接,Socket连接等资源需要程序员自行实现资源的回收。
这样就很容易出现一些 人为的错误 (human error), Scala的借贷模式就是为了解决此类问题,使资源使用完毕被自动回收,我们不必操心资源回收的过程。借贷模式是保证资源自动回收的重要机制。
此外,Scala 中将函数也是对象,可以像参数那样传递给另一个函数的特征使得借贷模式更加有意义。客户代码借贷了所需的资源,接下来如何使用这些资源以完成特定的任务则由客户决定。
以下是一种借贷模式的写法:
type Closable = { def close(): Unit }
def using[R <: Closable, A](resource: R)(f: R => A): A = {
try {
f(resource)
} finally {
ignoring(classOf[Throwable]) apply {
resource.close()
}
}
}