博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组合模式
阅读量:6843 次
发布时间:2019-06-26

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

转载请注明出处!

         全部配套代码均在github上:

 

跟着ZHONGHuan学习设计模式

组合模式

介绍:

         想必你已经了解了数据结构中的树,ok,组合模式对于你就是一会儿的功夫了。组合模式相对来说比較简单。

看一下定义

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

        

         临时没有想到好的样例。假设你有,请告诉我。以下我用树来对组合模式进行解释。树的结构是以下的这种:

        

         没棵树有一个根节点,也有叶子节点和树枝节点。一些结构都是用树结构表示的。比如树形菜单,文件和文件夹文件夹。那么怎样存储管理这种树结构,能够组合模式来解决。

 

组合模式的类图

        

         组合模式比較简单。所以。通过以下的代码,应该就能了解组合模式的含义了。

 

import java.util.ArrayList;abstract class Component{    protected String name; //这个用来标示一下节点    public Component(String name)    {        this.name = name;    }     public abstract void add(Component c);//添加儿子节点    public abstract void remove(Component c);//删除儿子节点}class Leaf extends Component{    public Leaf(String name)    {       super(name);    }     public  void add(Component c)    {       System.out.println("叶子节点不能添加子节点");    }     public void remove(Component c)    {    	System.out.println("叶子节点没有子节点,移除神马");    }}class Composite extends Component{     ArrayList
child; public Composite(String name) { super(name); if (child == null) { child = new ArrayList
(); } } public void add(Component c) { this.child.add(c); } public void remove(Component c) { this.child.remove(c); }}public class Client{ public static void main(String[] args) { Component tree=new Composite("A");//根节点通常是composite节点,给根节点取名A Component leafB=new Leaf("B");//创建了一个叶子节点B tree.add(leafB);//根节点有一个叶子节点儿子 Component branchC=new Composite("C");//一个树枝节点C tree.add(branchC);//树枝节点C是根节点A的子节点 Component leafD = new Leaf("D"); branchC.add(leafD);//树枝节点C有一个叶子子节点D //树结构大致构造完成 }}

         组合模式让我们能用树形方式创建对象的结构。树里面包括了组合以及个别的对象。使用组合结构。我们能把同样的操作应用在组合和个别对象上。换句话说。在大多数情况下,我们能够忽略对象组合和个别对象之间的区别。

 

你可能感兴趣的文章
3.6. Route
查看>>
[LintCode] Generate Parentheses 生成括号
查看>>
局部方法$("html").load()和全局方法$.get()、$.post()
查看>>
《死了都要TRY》——迎接2010
查看>>
线段树入门总结
查看>>
Arduino+Avr libc制作Badusb原理及示例讲解
查看>>
Android学习之Animation(一)
查看>>
13.11. Querying Properties
查看>>
拥抱更广阔的天空
查看>>
RX系列三 | RxJava | create | from | interval | just | range | filter
查看>>
49.3. Module
查看>>
流媒体技术学习笔记之(八)海康、大华IpCamera RTSP地址和格式
查看>>
《剑指offer》-数据流中的中位数
查看>>
当sql报错代码,不允许对表操作的原因
查看>>
php 处理 非法访问
查看>>
Jenkins安装部署
查看>>
15.4. Service-oriented architecture (SOA)
查看>>
Oracle的一些基本索引
查看>>
shell中if语句的格式以及使用
查看>>
SAP Lenoardo Machine Learning
查看>>