作者:cndz 围观群众:611 更新于 标签:设计模式组合模式组合模式讲解
组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表现部分-整体的层次结构。组合能让客户端以一致的方式处理个别对象以及对象组合。
组合模式由多个对象组合成树形结构,以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。优缺点
组合模式的实现方法有以下几个步骤:
假设现在需要实现一个文件夹管理系统,要求能够管理文件和文件夹,且可以对文件夹进行递归遍历。这个时候就可以使用组合模式来实现。
// 抽象组件
public interface AbstractFile {
void add(AbstractFile file);
void remove(AbstractFile file);
void getChild(int i);
void killVirus();
}
// 叶子组件
public class File implements AbstractFile {
private String name;
public File(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("不支持该方法");
}
@Override
public void getChild(int i) {
System.out.println("不支持该方法");
}
@Override
public void killVirus() {
System.out.println("对文件'" + name + "'进行杀毒");
}
}
// 容器组件
public class Folder implements AbstractFile {
private String name;
private List<AbstractFile> fileList = new ArrayList<AbstractFile>();
public Folder(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
fileList.add(file);
}
@Override
public void remove(AbstractFile file) {
fileList.remove(file);
}
@Override
public void getChild(int i) {
fileList.get(i);
}
@Override
public void killVirus() {
System.out.println("对文件夹'" + name + "'进行杀毒");
for (AbstractFile file : fileList) {
file.killVirus();
}
}
}
// 客户端
public class Client {
public static void main(String[] args) {
AbstractFile folder1 = new Folder("folder1");
AbstractFile folder2 = new Folder("folder2");
AbstractFile file1 = new File("file1");
AbstractFile file2 = new File("file2");
folder1.add(folder2);
folder1.add(file1);
folder2.add(file2);
folder1.killVirus();
}
}
组合模式是一种树形结构的设计模式,它将对象组合成树形结构以表现“部分-整体”的层次结构,使得客户端以一致的方式处理个别对象以及对象组合。组合模式的优点在于能够灵活地定义分层次的复杂对象、清晰地表示对象的全部或部分层次、提供了遍历树形结构的灵活性。而组合模式的缺点在于可能会造成系统过于庞大,类数量增加,并且不容易限制组合中的组件类型。