设计模式之GOF23组合模式
组合模式Composite
使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹)
组合模式核心:
-抽象构件(Component)角色:定义了叶子和容器的共同点
-叶子(Leaf)构件角色:无子节点
-容器(Composite)构件角色:有容器特征:可以包含子节点或者其他容器
例如杀毒软件:
public abstract class File {
protected String name;
abstract void killVirus();//杀毒
public File(String name) {
this.name = name;
}
}
class ImageFile extends File{
public ImageFile(String name) {
super(name);
}
public void killVirus() {
System.out.println("对图片"+this.name+".jpg进行杀毒");
}
}
class TextFile extends File{
public TextFile(String name) {
super(name);
}
public void killVirus() {
System.out.println("对文本"+this.name+".txt进行杀毒");
}
}
class Folder extends File{
List<File> files;
public Folder(String name) {
super(name);
files=new ArrayList<File>();
}
public void add(File f) {
files.add(f);
}
public void remove(int index) {
files.remove(index);
}
public File getChild(int index) {
return files.get(index);
}
void killVirus() {
System.out.println("对"+this.name+"进行查杀");
for(File f:files) {//天然的递归
f.killVirus();
}
}
}
public class Client {
public static void main(String[] args) {
File f2,f3,f4;
Folder f1=new Folder("我的收藏");
Folder f5=new Folder("我的小说");
f2=new ImageFile("小张");
f3=new TextFile("武林外传");
f4=new TextFile("家有儿女");
f5.add(f3);
f5.add(f4);
f1.add(f2);
f1.add(f5);
f1.killVirus();
}
}
最新文章
- h5和h4区别图片
- 通过 UDP 发送数据的简单范例
- [工程备案]linux基本命令以及C和C++编程
- Java实现 Base64、MD5、MAC、HMAC加密
- Linux下的paste合并命令详解
- Delphi中ADO异步执行方式
- 解决Nuget:https://api.nuget.org/v3/index.json 访问不了的问题
- Fiddler抓包【3】_设置断点修改
- centos7中bash: maven: 未找到命令... 解决办法
- 用shell脚本创建sqlite表并添加sql语句--通用
- 博文中标题的样式H1H2H3H4
- POJ - 2187 Beauty Contest(最远点对)
- Ubuntu 编译安装 Xdebug
- JQuery.validate 错误信息对话框
- selenium玩转svg操作
- python2 与 python3的区别总结
- Linux Shell中有三种引号的用法
- msys2 设置home路径为windows用户路径
- SpringBoot实战(九)之Validator
- Linux(三)高级文本处理命令
热门文章
- API加密框架monkey-api-encrypt发布1.2版本
- # Unity 游戏框架搭建 2019 (三十四、三十五) 9 ~ 10 示例整理
- react: typescript interface useState issue
- tensorflow1.0 构建神经网络做非线性归回
- 线程Event
- JS流程图解决方案GoJS
- 使用sqlmap结合dnslog快速注入
- 2019-2020-1 20199308《Linux内核原理与分析》第四周作业
- Redis持久化存储(一)
- 设计模式 - 迭代器模式详解及其在ArrayList中的应用