基于JAVA的设计模式之组合模式
Posted hbsdljz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于JAVA的设计模式之组合模式相关的知识,希望对你有一定的参考价值。
- 概念
将所有对象组合成一种树形结构,有分支节点、叶子节点,分支节点可以有自己的子节点,子节点可以是分支节点、叶子节点,可以进行增删的操作,而叶子节点不可以。比如文件夹就是一个分支节点,而文件就是一个叶子节点。用于遍历组织结构或者处理树形对象。父类引用指向派生类对象(Compoent->Document,Folder)。
- 类图
- 代码
public abstract class Component public void add(Component component) //新建文件夹或文件 public void remove(Component component) //删除文件夹或文件 public void print() //打印 public String getName() //名字 return null; public String getType() //类型 return null; //文件类 叶子类 不能操作孩子 即不能有add remove public class Document extends Component private String name; private String type; public Document(String name,String type) this.name=name; this.type=type; @Override public void print() System.out.println(type+":"+name); @Override public String getName() return this.name; @Override public String getType() return this.type;
//文件夹类 孩子可以是文件夹也可以是文件 public class Folder extends Component private String name; private String type; private List<Component>components=new ArrayList<Component>(); public Folder(String name,String type) this.name=name; this.type=type; @Override public void add(Component component) components.add(component); @Override public void remove(Component component) components.remove(component); @Override public void print() System.out.println(type+":"+name); for (Component component: components) component.print(); @Override public String getName() return this.name; @Override public String getType() return this.type; public class Main public static void main(String[] args) Folder desktop=new Folder("桌面","文件夹"); Folder c=new Folder("c:","文件夹"); Folder childFolder=new Folder("新建文件夹","文件夹"); Document d1=new Document("pig.jpg","文件"); Document d2=new Document("duck.png","文件"); childFolder.add(d1); childFolder.add(d2); c.add(childFolder); Folder d=new Folder("d:","文件夹"); Document d3=new Document("git.txt","文件"); d.add(d3); Folder e=new Folder("e:","文件夹"); desktop.add(c); desktop.add(d); desktop.add(e); desktop.print();
以上是关于基于JAVA的设计模式之组合模式的主要内容,如果未能解决你的问题,请参考以下文章