设为首页 加入收藏

TOP

Scalaz(15)- Monad:依赖注入-Reader besides Cake(二)
2017-10-10 12:13:30 】 浏览:8823
Tags:Scalaz Monad 依赖 注入 Reader besides Cake
<- isCoffeePresent 11 } yield hasCoffee 12 def warmerOn = for { 13 ison <- on 14 } yield ison 15 def warmerOff = for { 16 isoff <- off 17 } yield isoff 18 }

 

假设这时有人完成并提交了功能实现程序:

 

1  trait Heater extends OnOffDevice { 2     def on = println("heater.on") 3     def off = println("heater.off") 4  } 5  trait PotSensor extends SensorDevice { 6     def isCoffeePresent = false
7   }

有了功能实现的bytecode后就可以把它们组合起来了:

1   object allDevices extends Heater with PotSensor

现在可以实现集成后的trigger函数。这里需要使用具体的功能实现程序:

1  def trigger = { 2       if ( WarmerFuncImpl.thereIsCoffee(allDevices) ) 3  WarmerFuncImpl.warmerOn(allDevices) 4       else
5  WarmerFuncImpl.warmerOff(allDevices) 6   }                                               //> trigger: => scalaz.Id.Id[Unit] 7   //测试运行
8   trigger                                         //> heater.off

现在trigger的结果是heater.off,这是由感应器具体实现来确定的。当然,如果还有另一个版本的实现程序:

1  trait PotHasCoffee extends SensorDevice { 2     def isCoffeePresent = true
3   }

用PotHasCoffee来组合:

1   object allDevices extends Heater with PotHasCoffee

再测试:

1 //测试运行
2   trigger                                         //> heater.on

现在输入变成heater.on了。

似乎Monad Reader的依赖注入方式简单直接些。但Cake Pattern应该更适合团队协同开发,所以我们可以选择在局部功能开发中使用Reader,然后在大型软件集成时用Cake Pattern。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Scalaz(14)- Monad:函数组合.. 下一篇Scalaz(16)- Monad:依赖注入..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目