23种设计模式:13组合模式
介绍
组合模式非常简单,其实就是一个树状结构的组织或者模型,我们可以看看下面的总公司和分公司的组织架构。
-
其中有总公司,总公司下面有各种部门和分公司 分公司下面也有相应的部门
组合模式就是为了描述这种部门关系而存在的,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(); } }
-
打印结果如下
当前的组织架构是:北京总公司 当前的组织架构是:财务部 当前的组织架构是:开发部 当前的组织架构是:技术部 当前的组织架构是:成都分公司 当前的组织架构是:财务部 当前的组织架构是:开发部 当前的组织架构是:技术部 当前的组织架构是:上海分公司 当前的组织架构是:财务部 当前的组织架构是:开发部 当前的组织架构是:技术部 当前的组织架构是:浙江分公司 当前的组织架构是:财务部 当前的组织架构是:开发部 当前的组织架构是:技术部
总结
组合模式很简单也很常用,在实际开发中,如果需要树状结构的上下级关系,就可以考虑组合模式
下一篇:
散列函数之线性探测法处理冲突