定义:

  对象组合成部分整体结构,单个对象和组合对象具有一致性。

   看了下大概结构就是集团总公司和子公司那种层级结构。

  实现树状嵌套结构。

  角色介绍:

  Component :抽象根节点:其实相当去总公司,抽象子类共有的方法;

  Composite :相当于总公司的智能部门,也分管子公司,通过集合存储子节点对象,提供增删获取子节点对象的方法;

  leaf:子节点,相当于集团子公司,总公司具有的智能,子公司也具有,因此子节点具有总节点拥有的所有抽象方法以及提供给子类的方法。

  Client:通过抽象跟节点操作子节点的对象。

public abstract class Component {
protected String name; public Component(String name) {
this.name = name;
} public abstract void doSomething();
}
import java.util.ArrayList;
import java.util.List; /**
* 具体枝干节点
* Created by Administrator on 2016/9/3.
*/
public class Composite extends Component {
private List<Component> components = new ArrayList<>(); public Composite(String name) {
super(name);
} //新增子公司
public void addChild(Component component) {
components.add(component);
} //撤除子公司
public void remove(Component component) {
components.remove(component);
} //获取某个子公司对象信息
public void getChild(int index) {
components.get(index);
} @Override
public void doSomething() {
System.out.println(name);
for (int i = 0; i < components.size(); i++) {
components.get(i).doSomething();
}
}
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
} //相当于输出子公司名称
@Override
public void doSomething() {
System.out.println(name);
}
}

运行结果:

public class Test {

    public static void main(String[] args) {
Composite composite = new Composite("composite"); Composite composite1 = new Composite("composite1");
Composite composite2 = new Composite("composite1"); Leaf leaf = new Leaf("leaf1");
Leaf leaf2 = new Leaf("leaf2");
composite1.addChild(leaf);
composite2.addChild(leaf2); composite.addChild(composite1);
composite.addChild(composite2); composite.doSomething();
}
}

实际项目中的使用:

  1. 比如对sd卡文件和文件夹的操作上其实就可以使用该设计模式:
  2. 定义一个抽象类表示文件和文件夹,包含对文件增加,删除,遍历的抽象方法;
  3. 文件夹类继承自1中的抽象类,并实现抽象类中的抽象方法;
  4. 文件类继承自1中的抽象类,并实现抽象类中的抽象方法;

android源码里面使用到组合模式就是View和ViewGroup的嵌套组合。

还是很粗糙,以后使用过程中慢慢体会吧

设计模式 -- 组合模式 (Composite Pattern)的更多相关文章

  1. 浅谈设计模式--组合模式(Composite Pattern)

    组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...

  2. 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释

    组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...

  3. C#设计模式——组合模式(Composite Pattern)

    一.概述 在软件开发中,我们往往会遇上类似树形结构的对象体系.即某一对象既可能在树形结构中作为叶节点存在,也可能作为分支节点存在.比如在文件系统中,文件是作为叶节点存在,而文件夹就是分支节点.在设计这 ...

  4. 乐在其中设计模式(C#) - 组合模式(Composite Pattern)

    原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...

  5. 设计模式系列之组合模式(Composite Pattern)——树形结构的处理

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 二十四种设计模式:组合模式(Composite Pattern)

    组合模式(Composite Pattern) 介绍将对象组合成树形结构以表示"部分-整体"的层次结构.它使得客户对单个对象和复合对象的使用具有一致性.示例有一个Message实体 ...

  7. 【设计模式】组合模式 Composite Pattern

    树形结构是软件行业很常见的一种结构,几乎随处可见,  比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...

  8. python 设计模式之组合模式Composite Pattern

    #引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...

  9. 设计模式-12组合模式(Composite Pattern)

    1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...

随机推荐

  1. C++中内存泄露的检测

    C++没有java的内存垃圾回收机制,在程序短的时候可能比较容易发现问题,在程序长的时候是否有什么检测的方法呢? 假设有一个函数可以某点检测程序的内存使用情况,那是否可以在程序开始的时候设置一个点,在 ...

  2. ioc和aop

      IOC容器的基本原理 ioc又称为控制反转.或者依赖注入.为什么叫控制反转呢? 可以这样来看.软件开发中会有很多的类,这些类在一起完成复杂的功能.这些类之间存在了耦合的关系.就如同很多的齿轮,啮合 ...

  3. 应用facebook .net sdk

    1.本博客主要介绍如何应用facebook .net SDK,实现发帖.点赞.上传照片视频等功能,更多关于facebook API,请参考:https://developers.facebook.co ...

  4. Dogs[HDU2822]

    Dogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissio ...

  5. 安装xdebug后var_dump输出没有格式化的问题

    在ubuntu10.04下面配置Apache2.2 + PHP5.3的开发环境,顺便装了一个xdebug扩展方便调试代码. 但是环境配置好了之后却发现xdebug加载成功了但是var_dump输出的内 ...

  6. SVN版本冲突解决详解

    SVN版本冲突解决详解 分类: SVN(SubVersion)2009-11-23 15:45 27014人阅读 评论(12) 收藏 举报 svnsubversion服务器文档工作c 版本冲突原因: ...

  7. Eclipse添加Web和java EE插件

    1.在Eclipse中菜单help选项中选择install new software选项 2.在work with 栏中输入 Juno - http://download.eclipse.org/re ...

  8. easyuidatagrid扩展--玩一下,无实际意义

    直接上代码 $.extend($.fn.datagrid.defaults.editors, { operater: { init: function (container, options) { v ...

  9. EasyUI实现异步加载tree(整合Struts2)

    首先jsp页面有一ul用于展现Tree <ul id="mytree"></ul> 加载Tree <script type="text/ja ...

  10. C#线程同步(转)

    线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多线程处理提供了用不 ...