组合模式——composite

来源:互联网 发布:淘宝闲鱼拍卖可信吗 编辑:程序博客网 时间:2024/05/23 17:38

组合模式的使用场景:

 ——把部分与整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象


组合模式的核心:

——抽象构件(Component)角色:定义了叶子和容器构件的共同点。

——叶子构件角色:无子节点

——容器(Composite)构件角色:有容器特征,可以包含子节点。



下面以杀毒的流程来模拟一下组合模式的实现:

package composite;import java.util.ArrayList;import java.util.List;/** * 简单模拟杀毒软件的杀毒构架 * @author acer *///抽象构件角色public interface AbstractFile {public void killVirus();}//叶子构建class ImageFile implements AbstractFile{private String name;public ImageFile(String s) {this.name = s;}@Overridepublic void killVirus() {System.out.println("对图像文件"+name+"进行查杀");}}//叶子构建class TextFile implements AbstractFile{private String name;public TextFile(String s) {this.name = s;}@Overridepublic void killVirus() {System.out.println("对文本文件"+name+"进行查杀");}}//叶子构建class VideoFile implements AbstractFile{private String name;public VideoFile(String s) {this.name = s;}@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) {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();}}}

测试:

package composite;public class Client {public static void main(String[] args) {AbstractFile f2,f3,f4;Folder f1 = new Folder("我的文件夹");f2 = new ImageFile("feige.img");f3 = new TextFile("demo.txt");f1.add(f2);f1.add(f3);f1.killVirus();}}

这样就实现了组合模式。组合模式的应用场景很多:如资源管理器 xml文件解析  JUnit单元测试。

0 0
原创粉丝点击