博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之【组合模式】
阅读量:7015 次
发布时间:2019-06-28

本文共 4296 字,大约阅读时间需要 14 分钟。

组合模式    用面向对象的方式来处理树形结构    组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。    在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类的公共父类。    角色        Component抽象构件            可以是接口或抽象类            为叶子构件和容器构件对象声明接口        Leaf叶子构件            叶子节点没有子节点        Composite容器构件            容器节点包含子节点,其子节点可以是叶子节点,也可以是容器节点。

杀毒软件案例

1.抽象文件类

package Composite;/** * Created by Jiqing on 2016/10/5. */abstract class AbstractFile {    public abstract void add(AbstractFile file);    public abstract void remove(AbstractFile file);    public abstract AbstractFile getChild(int i);    public abstract void killVirus();}

2.Image文件类

package Composite;/** * Created by Jiqing on 2016/10/5. */public class ImageFile extends AbstractFile{    private String name;    public ImageFile (String name) {        this.name = name;    }    public void add(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public void remove(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public AbstractFile getChild(int i) {        System.out.println("对不起,不支持该方法!");        return null;    }    public void killVirus() {        // 模拟杀毒        System.out.println("----对图像文件'" + name + "'进行杀毒----");    }}

3.文本文件类

package Composite;/** * Created by Jiqing on 2016/10/5. */public class TextFile extends AbstractFile{    private String name;    public TextFile (String name) {        this.name = name;    }    public void add(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public void remove(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public AbstractFile getChild(int i) {        System.out.println("对不起,不支持该方法!");        return null;    }    public void killVirus() {        // 模拟杀毒        System.out.println("----对文本文件'" + name + "'进行杀毒----");    }}

4.视频文件类

package Composite;/** * Created by Jiqing on 2016/10/5. */public class VideoFile extends AbstractFile{    private String name;    public VideoFile (String name) {        this.name = name;    }    public void add(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public void remove(AbstractFile file) {        System.out.println("对不起,不支持该方法!");    }    public AbstractFile getChild(int i) {        System.out.println("对不起,不支持该方法!");        return null;    }    public void killVirus() {        // 模拟杀毒        System.out.println("----对视频文件'" + name + "'进行杀毒----");    }}

5.文件夹类

package Composite;import java.util.ArrayList;/** * Created by Jiqing on 2016/10/5. */public class Folder extends AbstractFile{    private ArrayList
fileList = new ArrayList
(); // 规定集合中成员类型 private String name; public Folder(String name) { this.name = name; } public void add(AbstractFile file) { fileList.add(file); } public void remove(AbstractFile file) { fileList.remove(file); } public AbstractFile getChild(int i) { return (AbstractFile)fileList.get(i); // 强制转换为类型 } public void killVirus() { System.out.println("****对文件夹'" + name + "'进行杀毒****"); // 模拟杀毒 // 递归调用成员构件的杀毒方法 for (Object obj :fileList) { ((AbstractFile)obj).killVirus(); } }}

6.客户端

package Composite;/** * Created by Jiqing on 2016/10/5. */public class Client {    public static void main(String args[]) {        AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3,folder4;        folder1 = new Folder("Jim的资料");        folder2 = new Folder("图像文件");        folder3 = new Folder("文本文件");        folder4 = new Folder("视频文件");        file1 = new ImageFile("小龙女.jpg");        file2 = new ImageFile("张无忌.gif");        file3 = new TextFile("九阴真经.txt");        file4 = new TextFile("葵花宝典.doc");        file5 = new VideoFile("笑傲江湖.rmvb");        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.killVirus();    }}

执行结果

****对文件夹'Jim的资料'进行杀毒****

****对文件夹'图像文件'进行杀毒****
----对图像文件'小龙女.jpg'进行杀毒----
----对图像文件'张无忌.gif'进行杀毒----
****对文件夹'文本文件'进行杀毒****
----对文本文件'九阴真经.txt'进行杀毒----
----对文本文件'葵花宝典.doc'进行杀毒----
****对文件夹'视频文件'进行杀毒****
----对视频文件'笑傲江湖.rmvb'进行杀毒----

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5932974.html,如需转载请自行联系原作者

你可能感兴趣的文章
修改tomcat默认发布目录
查看>>
Android 提示某某程序停止的原因
查看>>
JVM致命错误日志(hs_err_pid.log)解读
查看>>
React
查看>>
WebInterface 登录事件审核查询
查看>>
从一个进程监控脚本学几个Linux命令(`ps`,`grep`,`awk`,`wc`)
查看>>
OpenCascade BRep Format Description (2)
查看>>
我在大学毕业后学习Linux、python的一些经验
查看>>
探索虚函数表
查看>>
记一次对象归档中的错误, initWithCoder报
查看>>
MacOS安装delve
查看>>
VIM简单上手
查看>>
多张图片上传简单示例
查看>>
FADE代码解析2
查看>>
线程使用三——future和callable详解
查看>>
Logstash + DataHub + MaxCompute/StreamCompute 进行实时数据分析
查看>>
阿里云数加大数据计算服务MaxCompute学习路线图 (持续更新中)
查看>>
聊聊springcloud的GatewayControllerEndpoint
查看>>
聊聊sentinel的SentinelResourceAspect
查看>>
聊聊flink的SpoutWrapper
查看>>