在辽阔的梦之森中,丽莎和艾瑞克走进了一个奇异的地方。这里,每一棵树都能够发出音乐,但这些音乐都与众不同。一些树只能够发出单一的音符,而有些树则可以发出和谐的旋律,仿佛它们是由许多音乐树组合而成的。
interface MusicTree {
void playMusic();
}
class SingleNoteTree implements MusicTree {
private String note;
public SingleNoteTree(String note) {
this.note = note;
}
@Override
public void playMusic() {
System.out.println("Playing note: " + note);
}
}
class CompositeMusicTree implements MusicTree {
private List<MusicTree> children = new ArrayList<>();
public void add(MusicTree tree) {
children.add(tree);
}
@Override
public void playMusic() {
for (MusicTree tree : children) {
tree.playMusic();
}
}
}
艾瑞克指向一个被称为"项目管理器"的神秘结构,解释道:“这些音乐树都在模拟我们的组织项目结构。每个项目都有许多子任务,而每个子任务又可能有它的子任务。无论是大项目还是小任务,我们都可以统一地对待它们,这都得益于组合模式。”
在现实的业务场景中,例如一个项目管理软件,项目可以包含子任务,子任务又可以继续细分。使用组合模式,我们可以轻松地添加、移除或修改任何任务,无论它是单独的任务还是一个包含多个子任务的项目。
interface Task {
void complete();
}
class SimpleTask implements Task {
private String name;
public SimpleTask(String name) {
this.name = name;
}
@Override
public void complete() {
System.out.println(name + " has been completed.");
}
}
class CompositeTask implements Task {
private String name;
private List<Task> subTasks = new ArrayList<>();
public CompositeTask(String name) {
this.name = name;
}
public void addSubTask(Task task) {
subTasks.add(task);
}
@Override
public void complete() {
System.out.println(name + " is being processed...");
for (Task task : subTasks) {
task.complete();
}
System.out.println(name + " has been completed.");
}
}
随着他们的深入,组合模式的强大之处变得越发明显,它使得复杂的层级结构变得简单易管理。丽莎点击了项目的完成按钮,看到了所有子任务的进度逐一更新,她对艾瑞克说:“这真是一个神奇的森林,每一棵树都有它的故事。”