组合模式

来源:互联网 发布:md204lv4编程软件下载 编辑:程序博客网 时间:2024/05/16 08:01

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

核心:

  1. 抽象构件角色:定义好叶子和容器构件的共同点。
  2. 叶子构件角色:无叶子节点。
  3. 容器构件角色:有容器特征,可以包含子节点。
以杀毒软件为例:

AbstracFile.java(接口)

//抽象构建public interface AbstractFile {void killVirus();  //杀毒}class ImageFile implements AbstractFile {private String name;public ImageFile(String name) {super();this.name = name;}@Overridepublic void killVirus() {System.out.println("---图像文件:"+name+",进行查杀!");}}class TextFile implements AbstractFile {private String name;public TextFile(String name) {super();this.name = name;}@Overridepublic void killVirus() {System.out.println("---文本文件:"+name+",进行查杀!");}}class VideoFile implements AbstractFile {private String name;public VideoFile(String name) {super();this.name = name;}@Overridepublic void killVirus() {System.out.println("---视频文件:"+name+",进行查杀!");}}class Folder implements AbstractFile {private String name;//定义容器,用来存放本容器构建下的子节点private List<AbstractFile> list = new ArrayList<AbstractFile>();public Folder(String name) {super();this.name = name;}public void add(AbstractFile file){list.add(file);}public void remove(AbstractFile file){list.remove(file);}public AbstractFile getChild(int index){return list.get(index);}@Overridepublic void killVirus() {System.out.println("---文件夹:"+name+",进行查杀");for (AbstractFile file : list) {file.killVirus();}}}

Client.java(测试类)

public class Client {public static void main(String[] args) {AbstractFile f2,f3,f4,f5;Folder f1 = new Folder("我的收藏");f2 = new ImageFile("老高的大头像.jpg");f3 = new TextFile("Hello.txt");f1.add(f2);f1.add(f3);Folder f11 = new Folder("电影");f4 = new VideoFile("笑傲江湖.avi");f5 = new VideoFile("神雕侠侣.avi");f11.add(f4);f11.add(f5);f1.add(f11);//f2.killVirus();f1.killVirus();}}