组合模式用来描述类于类之间的关系,类似树形框架,主干到分支,他的标准定义是:"将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。";
Component类:
public abstract class Component {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void show();
@Override
public String toString() {
return "Component [name=" + name + "]";
}
}
Leaf类:
public class Leaf extends Component{
public Leaf(String name){
super.setName(name);
}
@Override
public void add(Component c) {
System.out.println("子节点不支持该方法");
}
@Override
public void remove(Component c) {
System.out.println("子节点不支持该方法");
}
@Override
public void show() {
System.out.println(super.getName());
}
}
Composite类:
public class Composite extends Component{
private List<Component> children = new ArrayList<>();
public Composite(String name){
super.setName(name);
}
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.add(c);
}
@Override
public void show() {
System.out.println(children);
}
}
Client类:
public class Client {
public static void main(String[] args) {
Component manager = new Composite("老大");
Component staff1 = new Leaf("张三");
Component staff2 = new Leaf("李四");
manager.add(staff1);
manager.add(staff2);
manager.show();
}
}
组合模式很方便的描述了层级关系,同时对各个层级应有的功能进行了定义,这个例子可以很好的套用在会员等级,国家行政级别,公司职员等级等实际关系上,