scala中借贷模式(Loan Pattern)的使用

定义

在程序编写中,我们可能经常遇到这样的情况:

  • 打开某个文件, 统计其中记录条数, 关闭该文件
  • 打开数据库, 读取信息, 关闭数据库

这种模式都可以归纳为:

  1. 打开冰箱(获取某种资源)
  2. 把鸡蛋放进去, 把牛奶取出来等等…(操纵资源)
  3. 关闭冰箱 (关闭资源)

对于这种模式, 我们就可以使用”借贷”模式.

借贷模式是一种控制抽象函数(control-abstraction function), 它试图打开某项资源, 然后将对资源的所有权暂时”借贷”给其他函数, 待其他函数完成操作后, 所有权收回来.

使用这一模式的原因是, 既然资源集中在一个对象中, 那么用户代码就不能一直保持着获得的资源, 而应该在需要时就向资源提供方进行借贷, 用完立即归还. 同时, 这也是一种对系统资源操作的封装, 为了防止资源不被安全释放(close), 其次用户代码不用考虑资源来自何处, 以及如何归还, 只要用就行.

此外, scala 中函数也是对象, 可以向参数那样传递给另一个函数的特征使得贷出模式更有意义. 客户代码借贷了所需的资源. 接下来如何使用这些资源以完成特定的任务则由客户决定. 就像我们向银行贷款,这些钱的具体用途是客户决定,也是客户才明确的.

代码实例

def writeFile(fileName: File)(operation: PrintWriter => Unit) { 
    val writer = new PrintWriter(fileName)  // 贷出资源writer 
    try{ 
        operation(writer)   // 客户使用资源 
    }finally { 
        writer.close()  // 用完则释放被回收 
    } 
} 

writeFile 函数的定义用到了柯里化方法, 后面的参数operation用于传入客户具体想要的操作(即怎么使用资源)

客户调用如下:

val file = new File("test.txt") 
writeFile(file) { 
    // 使用资源的具体操作 
    writer => writer.println("你好啊 ...\r\n" + 
                              new java.util.Date()) 
} 

执行该脚本,会发现在当前目录下生成一个 test.txt 文件, 文件内容即”你好啊…和时间”

参考资料:
1. Scala:初识贷出模式(Loan Pettern)
http://haolloyin.blog.51cto.com/1177454/387138/
2. 如何理解Scala中的借贷模式(loan pattern)?
https://www.zhihu.com/question/33403476

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值