`
cjuexuan
  • 浏览: 13194 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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()
}

3
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics