scala实现组合模式

package com.linewell.modeldesgin.Composite

import scala.collection.mutable.ArrayBuffer

/**
* 抽象构件,透明组合模式
* Created by ctao on 2015/8/16.
*/
trait AbstractFile {
def add(abstractFile: AbstractFile) = println("对不起,不支持该方法")

def remove(abstractFile: AbstractFile) = println("对不起,不支持该方法")

def child(i: Int): AbstractFile = {
println("对不起,不支持该方法")
null
}

def killVirus(): Unit

}

/**
* 图片文件样例类
* @param name 文件名
*/
case class ImageFile(name: String) extends AbstractFile {
override def killVirus(): Unit = println(s"------对图像$name 进行杀毒")
}

/**
* 文本文件样例类
* @param name 文件名
*/
case class TextFile(name: String) extends AbstractFile {
override def killVirus(): Unit = println(s"------对文本文件$name 进行杀毒")
}

/**
* 视频文件样例类
* @param name 文件名
*/
case class VideoFile(name: String) extends AbstractFile {
override def killVirus(): Unit = println(s"------对视频文件$name 进行杀毒")
}


/**
* 文件夹样例类
* @param name 文件夹名
*/
case class Folder(name: String) extends AbstractFile {
/**
* 队列,存放文件或文件夹
*/
var fileList = new ArrayBuffer[AbstractFile]()


/**
* 插入
* @param abstractFile 抽象构件
*/
override def add(abstractFile: AbstractFile) = fileList += abstractFile


/**
* 删除
* @param abstractFile 抽象构件
*/
override def remove(abstractFile: AbstractFile) = fileList -= abstractFile

/**
* 查找孩子
* @param i 索引
* @return 子对象
*/
override def child(i: Int) = fileList(i)

/**
* 递归调用
*/
override def killVirus(): Unit = {
println(s"******对文件夹$name 进行杀毒")
for (file <- fileList) file.killVirus()
}
}
package com.linewell.modeldesgin.Composite

/**
* 测试客户端
* Created by ctao on 2015/8/16.
*/
object Client extends App {
/**
* 文件夹
*/
val folder1 = Folder("ctao的资料")
val folder2 = Folder("图像资料")
val folder3 = Folder("文本文件")
val folder4 = Folder("视频资料")


/**
* 文件
*/
val file1 = ImageFile("qq截图.jpg")
val file2 = ImageFile("美图.png")
val file3 = TextFile("solr.log")
val file4 = TextFile("迭代.doc")
val file5 = VideoFile("测试.avi")

folder2.add(file1)
folder2.add(file2)
folder3.add(file3)
folder3.add(file4)
folder4.add(file5)
folder1.add(folder2)
folder1.add(folder3)
folder1.add(folder4)

folder1.remove(folder3)
// folder1.child(2).killVirus()
/**
* 对根文件夹杀毒,递归调用
*/
folder1.killVirus()

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值