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

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

}
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics