定义:将对象组合成树形结构以表示 部分--整体的层次结构
组合模式使客户端对单个对象和组合对象保持一致的方式处理
类型:结构型
优点:
1.清楚地定义分层次的复杂对象,表示对象的全部去或部分层次
2.让客户端忽略了层次的差异,方便对整个层次结构进行控制
3.简化客户端代码
4.符合开闭原则
public abstract class CatalogComponent { public void add(CatalogComponent catalogComponent){ throw new UnsupportedOperationException("不支持添加操作"); } public void remove(CatalogComponent catalogComponent){ throw new UnsupportedOperationException("不支持删除操作"); } public String getName(CatalogComponent catalogComponent){ throw new UnsupportedOperationException("不支持获取名称操作"); } public double getPrice(CatalogComponent catalogComponent){ throw new UnsupportedOperationException("不支持获取价格操作"); } public void print(){ throw new UnsupportedOperationException("不支持打印操作"); }}
public class Course extends CatalogComponent { private String name; private double price; public Course(String name, double price) { this.name = name; this.price = price; } @Override public String getName(CatalogComponent catalogComponent) { return this.name; } @Override public double getPrice(CatalogComponent catalogComponent) { return this.price; } @Override public void print() { System.out.println("Course Name:"+name+" price:"+price); }}
public class CourseCatalog extends CatalogComponent{ private Listitems=new ArrayList (); private String name; private Integer level; public CourseCatalog(String name,Integer level) { this.name = name; this.level=level; } @Override public void add(CatalogComponent catalogComponent) { items.add(catalogComponent); } @Override public void remove(CatalogComponent catalogComponent) { items.remove(catalogComponent); } @Override public void print() { System.out.println(this.name); for(CatalogComponent catalogComponent:items){ if(this.level!=null){ for(int i=0;i