设计模式之组合模式

来源:互联网 发布:nodejs 和 php 编辑:程序博客网 时间:2024/06/03 16:31

设计模式之组合模式

使用组合模式的场景:
把部分和整体的关系用树状结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象


核心:

  • 抽象构件角色:定义了叶子和容器构件的共同点
  • 叶子结点:无子节点
  • 容器构件角色:有容器的特性,可以包含子节点,


组合模式怎么用

我们一病毒查杀为例,练习一下组合模式

public interface File {    void kill();// 杀病毒}//叶子结点class ImageFile implements File {    private String name;    public ImageFile(String name) {        super();        this.name = name;    }    @Override    public void kill() {        System.out.println("对图片:"+name+"进行查杀");    }}//叶子结点class TextFile implements File {    private String name;    public TextFile(String name) {        super();        this.name = name;    }    @Override    public void kill() {        System.out.println("对文本:"+name+"进行查杀");    }}//叶子结点class VideoFile implements File {    private String name;    public VideoFile(String name) {        super();        this.name = name;    }    @Override    public void kill() {        System.out.println("对音频:"+name+"进行查杀");    }}
package Composite;import java.util.ArrayList;import java.util.List;//容器构建public class Fildor implements File{    private List<File> list = new ArrayList<File>();    private String name;    public Fildor(String name) {        super();        this.name = name;    }    public void add(File e) {        list.add(e);    }    public void remove(File e) {        list.remove(e);    }    public void getFile(int index) {        list.get(index);    }    /**     * @return the name     */    public String getName() {        return name;    }    /**     * @param name the name to set     */    public void setName(String name) {        this.name = name;    }    @Override    public void kill() {        System.out.println("对文件夹"+name+"进行查杀");        for (File file : list) {            file.kill();        }    }}
package Composite;public class Client {    public static void main(String[] args) {        Fildor fildor = new Fildor("我的文件夹");        File file = new TextFile("我的笔记.txt");        File file2 = new VideoFile("我的录音.mp3");        File file3 = new ImageFile("我的照片.jpg");        fildor.add(file);        fildor.add(file2);        fildor.add(file3);        fildor.kill();    }}

什么时候用组合模式

  • 开发中的应用场景:
  • 操作系统的资源管理器
  • GUI的容器层次图
  • XML文件的解析
  • OA系统中,组织结构的处理
  • junit单元测试框架
0 0