简介
组合模式就是通过将单个对象和组合对象用相同的接口进行表示,使得客户对单个对象和组合对象的使用具有一致性。
概述图
从上面的图能看出是一个树结构,并且就是我们电脑中的文件夹,而每个文件夹中包含着文件夹、图片、文本等,文件夹将这些对象包含着并表示成一个整体的结构。
结构树
public interface Tree {
public void show();
}
结构树主要是统一树中的对象的行为方法,具体行为由实现的类来决定,结构树也可以是抽象类,使用抽象类的时候,可以将一些共用方法放在抽象类中,由子类去实现具体的抽象方法。
图片
public class Image implements Tree{
public void show() {
System.out.println("图片");
}
}
文本
public class Text implements Tree{
public void show() {
System.out.println("文本");
}
}
文件夹
public class Document implements Tree{
public ArrayList<Tree> list = new ArrayList<>();
public void add(Tree tree){
list.add(tree);
}
public void show() {
System.out.println("文件夹");
for(Tree tree: list){
tree.show();
}
}
}
从上面的代码能看出文件夹、图片、文本类都实现了结构树并重写了结构树中的show
方法,主要还是看文件夹类中的代码,文件夹类中的list
主要是存放当前文件夹下所拥有的一些文件对象(文件夹、图片、文本),而show
方法则是循环处理文件夹中的文件对象。
测试
public void Combination(){
// 文件夹1
Document document1 = new Document();
// 文件夹2
Document document2 = new Document();
// 文件夹3
Document document3 = new Document();
// 图片1
Image image1 = new Image();
// 图片2
Image image2 = new Image();
// 文本1
Text text1 = new Text();
// 文本2
Text text2 = new Text();
document1.add(document2);
document1.add(image1);
document1.add(text1);
document2.add(image2);
document2.add(document3);
document3.add(text2);
document1.show();
}