博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—-(9)组合模式(结构型)
阅读量:4101 次
发布时间:2019-05-25

本文共 2610 字,大约阅读时间需要 8 分钟。

组合模式:

组合模式又叫部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,

客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕.

组合模式可以优化处理递归分级数据结构.有许多关于分级数据结构的例子,使得组合模式非常有用武之地.

1.定义:

     将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。

2角色:
  1).Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
子部件。
  2).Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
  3).Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除

(remove)等。

2.建模

3.实现:


1 public static void main(String[] args) { 2          3         Component component=new Composite("根节点"); 4         Component child=new Composite("一级子节点child"); 5         Component child_1=new Leaf("一级子节点child之子节点一"); 6         Component child_2=new Leaf("一级子节点child之子节点二"); 7         child.add(child_1); 8         child.add(child_2); 9         Component child2=new Composite("一级子节点child2");10         component.add(child);11         component.add(child2);12         component.foreach();13     }14 15 }16  abstract class Component {  17      18      String name;19      20      public Component(String s){21          22          this.name=s;23      }24      public abstract void add(Component c);25      public abstract void remove(Component c);26      public abstract void foreach();27  }28 //组合类29  class Composite extends Component{30     private List
child=new ArrayList
31 ();32 33 public Composite(String s) {34 super(s);35 // TODO Auto-generated constructor stub36 }37 38 @Override39 public void add(Component c) {40 child.add(c);41 42 }43 44 @Override45 public void foreach() {46 // TODO Auto-generated method stub47 System.out.println("节点名:\t"+name);48 for (Component c : child) {49 c.foreach();50 }51 }52 53 @Override54 public void remove(Component c) {55 // TODO Auto-generated method stub56 child.remove(c);57 }58 59 }60 //不在有根节点61 class Leaf extends Component{62 63 public Leaf(String s) {64 super(s);65 66 }67 68 @Override69 public void add(Component c) {70 // TODO Auto-generated method stub71 72 }73 @Override74 public void foreach() {75 System.out.println("tself name-->"+this.name);76 }77 78 @Override79 public void remove(Component c) {80 // TODO Auto-generated method stub81 82 }83 84 }

执行结果:

节点名: 根节点
节点名: 一级子节点child
tself name-->一级子节点child之子节点一
tself name-->一级子节点child之子节点二
节点名: 一级子节点child2


4.总结

什么情况下使用组合模式

       引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

你可能感兴趣的文章
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
谈谈加密和混淆吧[转]
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
图形学 图形渲染管线
查看>>