前言
本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录
组合模式
组合模式让我们能用树形方式创建对象的结构,其中树里面包含了组合以及个别的对象。
故公共基类的方法是一致,区分在于要不要实现
树类型基类
包含所有的方法
package composite_pattern;
public abstract class Tree {
public abstract String getName();
public void add(Tree mTree){
throw new UnsupportedOperationException();
}
public Tree getChild(int position){
throw new UnsupportedOperationException();
}
public boolean hasTreeLeaf(){
throw new UnsupportedOperationException();
}
public boolean hasTreeTrunk() {
throw new UnsupportedOperationException();
}
}
上述的方法实现了,但是需要子类进行重写
树干子类
package composite_pattern;
import java.util.ArrayList;
public class TreeTrunk extends Tree {
private ArrayList<Tree> mlist = new ArrayList<>();
@Override
public String getName() {
return TreeTrunk.class.getSimpleName();
}
@Override
public void add(Tree mTree) {
mlist.add(mTree);
}
@Override
public Tree getChild(int position) {
return mlist.get(position);
}
@Override
public boolean hasTreeTrunk() {
return true;
}
@Override
public boolean hasTreeLeaf() {
return true;
}
}
树叶子类
叶子属于最终节点,故不需要add(),getChild等方法
package composite_pattern;
public class TreeLeaf extends Tree {
@Override
public String getName() {
return TreeLeaf.class.getSimpleName();
}
@Override
public boolean hasTreeTrunk() {
return false;
}
@Override
public boolean hasTreeLeaf() {
return true;
}
}
结语
感觉这种类似菜单-子菜单设计的树状模型还是挺常见的