scala实现模版方法模式

package com.linewell.modeldesgin.template

import com.linewell.modeldesgin.dao.AccessDAO

import scala.collection.mutable.ArrayBuffer

/**
* 模版方法模式
* Created by ctao on 2015/9/2.
*/
trait Account {

/**
* 验证帐号
* @param account 用户名
* @param pass 密码
* @return 是否合法
*/
def validate(account: String, pass: String): Boolean = {
val params = ArrayBuffer[Any](account)
val result = AccessDAO.checkUser(params)
result.head.getOrElse("name", "null") == account && result.head.getOrElse("pass", "null") == pass
}


/**
* 计算利息的方式
*/
def calculateInterest(): Unit

/**
* 显示方法
*/
def display() = println("显示利息")

/**
* 模版方法
* @param account 账户
* @param pass 密码
*/
def handle(account: String, pass: String): Unit = validate(account, pass) match {
case true => calculateInterest()
display()
case false =>
println("账户或密码错误")
}


}

/**
* 活期帐户
*/
case object CurrentAccount extends Account {
override def calculateInterest(): Unit = println("按照活期计算利息")
}

/**
* 定期帐户
*/
case object SavingAccount extends Account {
override def calculateInterest(): Unit = println("按照定期计算利息")
}

package com.linewell.modeldesgin.template

/**
* 测试客户端
* Created by ctao on 2015/9/2.
*/
object Client extends App {
val account1: Account = SavingAccount
account1.handle("ct", "123")

val account2: Account = SavingAccount
account2.handle("ct", "1233")


val account3: Account = CurrentAccount
account3.handle("ct", "123")
}
package com.linewell.modeldesgin.template

/**
* 钩子方法的使用
* Created by ctao on 2015/9/2.
*/
sealed trait DataViewer {

/**
* 获取数据格式
*/
def data(): Unit

/**
* 转化方法
*/
private def convertData() = println("将数据转化为XML格式")

/**
* 展示方法
*/
private def displayData(): Unit = println("以XML形式显示数据")

/**
* 是否为xml格式
* @return 判断结果
*/
protected def isNotXmlData = true

/**
* 模版方法
*/
def process(): Unit = {
data()

/**
* 钩子
*/
if (isNotXmlData) {
convertData()
}
displayData()
}

}

/**
*XML格式数据
*/
case object XMLDataViewer extends DataViewer {
override def data(): Unit = println("从XML文件中获取数据")


override def isNotXmlData = false
}

/**
* JSON格式数据
*/
case object JSONDataViewer extends DataViewer {
override def data(): Unit = println("从JSON文件中获取数据")
}

package com.linewell.modeldesgin.template

/**
* 测试客户端
* Created by ctao on 2015/9/2.
*/
object ClientHook extends App {
val dataView1 = XMLDataViewer
val dataView2 = JSONDataViewer
dataView1.process()
dataView2.process()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值