介绍
组合模式非常简单,其实就是一个树状结构的组织或者模型,我们可以看看下面的总公司和分公司的组织架构。
- 其中有总公司,总公司下面有各种部门和分公司
- 分公司下面也有相应的部门
组合模式就是为了描述这种部门关系而存在的,UML非常简单,不利于理解,大家可以直接看代码吧!
UML
代码
- Component:接口,代表一种组织架构部
public interface Component {
void add(Component component);
void del(Component component);
void show();
}
- Composite:接口下面的具体组织,这里用来放拥有部门的公司
public class Composite implements Component{
String value;
List<Component> childred = new ArrayList<>();
public Composite(String value) {
this.value = value;
}
@Override
public void add(Component component) {
childred.add(component);
}
@Override
public void del(Component component) {
childred.remove(component);
}
@Override
public void show() {
System.out.println("当前的组织架构是:" + this.value);
if(childred != null && childred.size() != 0){
for(Component c:childred){
c.show();
}
}
}
}
- Leaf:同样继承了Component的接口,这里用来存放部门
public class Leaf implements Component{
String value;
public Leaf(String value) {
this.value = value;
}
@Override
public void add(Component component) {
System.out.println("没有相应的权限");
}
@Override
public void del(Component component) {
System.out.println("没有相应的权限");
}
@Override
public void show() {
System.out.println("当前的组织架构是:" + this.value);
}
}
- 调用例子
public class Demo {
public static void main(String[] args) {
Composite composite = new Composite("北京总公司");
Composite CDComposite = new Composite("成都分公司");
Composite SHComposite = new Composite("上海分公司");
Composite ZJComposite = new Composite("浙江分公司");
composite.add(new Leaf("财务部"));
composite.add(new Leaf("开发部"));
composite.add(new Leaf("技术部"));
composite.add(CDComposite);
composite.add(SHComposite);
composite.add(ZJComposite);
CDComposite.add(new Leaf("财务部"));
CDComposite.add(new Leaf("开发部"));
CDComposite.add(new Leaf("技术部"));
SHComposite.add(new Leaf("财务部"));
SHComposite.add(new Leaf("开发部"));
SHComposite.add(new Leaf("技术部"));
ZJComposite.add(new Leaf("财务部"));
ZJComposite.add(new Leaf("开发部"));
ZJComposite.add(new Leaf("技术部"));
composite.show();
}
}
- 打印结果如下
当前的组织架构是:北京总公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:成都分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:上海分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
当前的组织架构是:浙江分公司
当前的组织架构是:财务部
当前的组织架构是:开发部
当前的组织架构是:技术部
总结
组合模式很简单也很常用,在实际开发中,如果需要树状结构的上下级关系,就可以考虑组合模式