scala实现适配器模式

package com.linewell.modeldesgin.adpter

/**
* 适配器模式
* 原有的快速排序和二分排序算法,和目标接口并不相符合
* Created by ctao on 2015/8/9.
*/
/**
* 抽象目标
*/
trait ScoreOperation {
/**
* 排序
* @param array 数组
* @return 排序的数组
*/
def sort(array: Array[Int]): Array[Int]

/**
* 查找
* @param array 数组
* @param key 要查找的值
* @return 1表示找到,-1表示未找到
*/
def search(array: Array[Int], key: Int): Int
}

object QuickSort {
/**
* 快速排序算法
* @param array 数组
* @return 排序数组
*/
def quickSort(array: Array[Int]): Array[Int] = {
if (array.length <= 1) array
else {
val mid = array(array.length / 2)
Array.concat(
quickSort(array.filter(mid > _)),
array.filter(mid == _),
quickSort(array.filter(mid < _))
)
}
}
}

object BinarySearch {
/**
* 二分查找
* @param array 数组(数组为已经排好序的数组)
* @param key 要找的值
* @return 找到为1 否则为-1
*/
def binarySearch(array: Array[Int], key: Int): Int = {
var low = 0
var high = array.length - 1
while (low <= high) {
val mid = (low + high) / 2
val midVal = array(mid)
if (midVal < key) {
low = mid + 1
} else if (midVal > key) {
high = mid - 1
} else {
//不能直接 1 ,否则将进入死循环
return 1
}
}
-1
}

}

/**
* 适配器类
*/
object OperationAdapter extends ScoreOperation {
//快速排序,适配者
private val sortObj = QuickSort
//二分查找,适配者
private val searchObj = BinarySearch

//调用适配者快速排序的快速排序方法,实现接口的方法
override def sort(array: Array[Int]) = sortObj.quickSort(array)

//调用适配者二分查找的二分查找方法,实现接口的方法
override def search(array: Array[Int], key: Int) = searchObj.binarySearch(array, key)
}
package com.linewell.modeldesgin.adpter

/**
* 测试客户端
* Created by ctao on 2015/8/9.
*/

object Client extends App {
//原数组
val sources = Array(84, 76, 50, 69, 90, 91, 88, 86)
//适配器接口
val scoreOperation: ScoreOperation = OperationAdapter
//排序
val result = scoreOperation.sort(sources)
println("成绩排序输出")
result.foreach(x => print(x + ","))
var key = 90
println(s"查找成绩:$key")
println(scoreOperation.search(result,key))
if( scoreOperation.search(result,key) == 1) println(s"找到成绩$key") else println(s"没有找到成绩$key")
key = 89
println(s"查找成绩:$key")
if( scoreOperation.search(result,key) == 1) println(s"找到成绩$key") else println(s"没有找到成绩$key")


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值