概述
组合模式 : 允许你将对象组合成树形结构来表现 "整体/部分" 层次结构。组合能够让我们用一致的方式处理个别对象以及对象集合。
先来看一张图
demo01.png
图中所示的结构和树一样,有叶子节点也有根节点,我们如何能够将二者统一起来,像处理叶子节点一样处理根节点,或者说像处理根节点一样处理叶子节点。下面我们以一个简单的遍历来实现这种效果。首先,我们定义一个统一的父类。
public abstract class LessonModal {
protected String name;
public String getName() {
return name;
}
public void print() {
throw new UnsupportedOperationException();
}
public void add(LessonModal modal) {
throw new UnsupportedOperationException();
}
public void remove(LessonModal modal) {
throw new UnsupportedOperationException();
}
public LessonModal getChild() {
throw new UnsupportedOperationException();
}
}
由于叶子节点无法再添加子节点,所以在这里我们将 print(), get(), remove(), getChild() 方法设置默认抛出一个异常。这样的话,在继承的时候,根节点就重写这三个方法,而叶子节点只需要重写 print() 方法,其它都使用默认实现即可。
public class ScienceLesson extends LessonModal {
private ArrayList lessons = new ArrayList<>();
public ScienceLesson() {
this.name = "ScienceLesson";
}
@Override
public void add(LessonModal modal) {
lessons.add(modal);
}
@Override
public void remove(LessonModal modal) {
lessons.remove(modal);
}
@Override
public void print() {
System.out.println(getName());
Iterator modalIterator = lessons.iterator();
while (modalIterator.hasNext()) {
LessonModal modal = modalIterator.next();
System.out.print("t");
modal.print();
}
}
}
在 print() 方法中我们仍然使用了迭代器。这是根节点的书写方式,下面再看看叶子节点的书写方式。
public class Biological extends LessonModal {
public Biological() {
this.name = "Biological";
}
@Override
public void print() {
System.out.println(getName());
}
}
其它的几个类都采用以上这两种写法,根据自己的不同种类进行选择。可见,只要我们这么做,就可以对根节点和叶子节点进行统一的处理,不必区别对待。下面进行测试
public class Client {
public static void main(String[] args) {
LessonModal scienceLesson = new ScienceLesson();
LessonModal biological = new Biological();
LessonModal physical = new Physical();
LessonModal chemical = new Chemical();
LessonModal organicChemical = new OrganicChemical();
LessonModal inorganicChemical = new InorganicChemical();
chemical.add(organicChemical);
chemical.add(inorganicChemical);
scienceLesson.add(biological);
scienceLesson.add(chemical);
scienceLesson.add(physical);
scienceLesson.print();
}
}
输出结果
ScienceLesson
Biological
Chemical
Organic Chemical
Inorganic Chemical
Physical
最后
以上就是优秀柚子为你收集整理的java组合类写法_Java 设计模式 -- 组合模式的全部内容,希望文章能够帮你解决java组合类写法_Java 设计模式 -- 组合模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复