这不是任何类型的赋值。我正在学习Scala和Scala并发,最好是与AkkaActors一起学习。我这样做的方法之一是提出一些简单的程序设计,并尝试提出一个涉及应用于设计的Actors/并发性的实现:
我想编写的程序是一个储蓄银行账户应用程序,它有一个输入组件和一个输出组件
XYZ银行向客户提供开设储蓄账户的计划
1)要求客户ABC在开户时提供其个人详细信息
2)客户可以将钱存入他/她的账户吗
3)客户可以从他/她的账户中提款
4)如果账户余额低于100美元,则会通知客户。(例如,当客户从应用程序的输入屏幕中选择选项3时,他/她会被告知当时的账户余额低于100美元,因此无法提款,除非他们向其中存入更多的钱。)
5)应用程序应能够维护客户的交易历史,并显示交易历史(例如:当应用程序显示输入屏幕时,其中一个选项是-显示交易历史。当提示时选择该选项并附上数字时,应用程序应显示余额)
程序的输入部分由命令行上显示的4个选项组成:1。创建帐户2。存款3。提款。4.显示交易历史
现在,我正在努力实现的是理解和识别:
1) 在这样的程序中,Akka actors/Scala并发库的用例是什么?该应用程序中的并发角色(如果有的话)是什么?
我最能利用哪些Scala集合库?
我希望这能解决问题:http://alexminnaar.com/introduction-to-the-multithreading-problem-and-the-akka-actor-solution.html
注意:我刚刚注意到这篇文章很旧。我将在2018年发布答案。
更新1:(来自链接的解释,在评论中提到)
这是多种可能策略中的一种方法。
有两个Actor使用
-
银行账户-管理余额
object WireTransfer { case class Transfer(from: ActorRef, to: ActorRef, amount: BigInt) case object Done case object Failed } //actor implementing the actions of a wire transfer between two bank account actors class WireTransfer extends Actor { import WireTransfer._ def receive = LoggingReceive { //If Transfer message is received, send withdraw message to 'from' and wait for reply case Transfer(from, to, amount) => from ! BankAccount.Withdraw(amount) context.become(awaitFrom(to, amount, sender)) } //If Withdraw was successful, send deposit to other bank account actor, or else give them a failure message def awaitFrom(to: ActorRef, amount: BigInt, customer: ActorRef): Receive = LoggingReceive { case BankAccount.Done => to ! BankAccount.Deposit(amount) context.become(awaitTo(customer)) case BankAccount.Failed => customer ! Failed context.stop(self) } //If deposit was successful, send 'Done' to original actor that sent Transfer message def awaitTo(customer: ActorRef): Receive = LoggingReceive { case BankAccount.Done => customer ! Done context.stop(self) } }
-
WireTransfer-将余额从一个帐户转移到另一个帐户。
object WireTransfer { case class Transfer(from: ActorRef, to: ActorRef, amount: BigInt) case object Done case object Failed } //actor implementing the actions of a wire transfer between two bank account actors class WireTransfer extends Actor { import WireTransfer._ def receive = LoggingReceive { //If Transfer message is received, send withdraw message to 'from' and wait for reply case Transfer(from, to, amount) => from ! BankAccount.Withdraw(amount) context.become(awaitFrom(to, amount, sender)) } //If Withdraw was successful, send deposit to other bank account actor, or else give them a failure message def awaitFrom(to: ActorRef, amount: BigInt, customer: ActorRef): Receive = LoggingReceive { case BankAccount.Done => to ! BankAccount.Deposit(amount) context.become(awaitTo(customer)) case BankAccount.Failed => customer ! Failed context.stop(self) } //If deposit was successful, send 'Done' to original actor that sent Transfer message def awaitTo(customer: ActorRef): Receive = LoggingReceive { case BankAccount.Done => customer ! Done context.stop(self) } }