1. 组合模式涉及的是一组对象,其中一些对象可能含有其他对象,这些对象也可以含有对象,因此,有些对象代表的是对象群组。
  2. Composite模式的设计意图在于:让所有的用户能够用统一的接口处理单个对象以及对象群组
  1. package app.composite;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. /**
  6. * 类的作用:存在年级和学校,都实现People接口,有输出名字的功能,实现组合模式
  7. * 调用School的getName();获取全校学生的名字
  8. * @author Administrator
  9. *
  10. */
  11. public class CompositeTest {
  12. public static void main(String[] args) {
  13. School school=new School("前途小学");
  14. Grade grade1=new Grade("一年级");
  15. grade1.add(new Student("小明"));
  16. grade1.add(new Student("小红"));
  17. Grade grade2=new Grade("二年级");
  18. grade2.add(new Student("小亮"));
  19. grade2.add(new Student("小华"));
  20. school.add(grade1);
  21. school.add(grade2);
  22. school.getName();
  23. }
  24. }
  25. //学校
  26. interface People{
  27. public void getName();//获得
  28. }
  29. class Student implements People{
  30. String name;
  31. public Student(String name){
  32. this.name=name;
  33. }
  34. @Override
  35. public void getName() {
  36. System.out.println(this.name);
  37. }
  38. }
  39. class Grade implements People{//年级
  40. private String gradeName; //年级名字
  41. public Grade(String name){
  42. this.gradeName=name;
  43. }
  44. private ArrayList studentList =new ArrayList();
  45. public void add(Student s){
  46. this.studentList.add(s);
  47. }
  48. @Override
  49. public void getName() {
  50. System.out.println("年级:"+this.gradeName);
  51. Iterator it=studentList.iterator();
  52. while(it.hasNext()){
  53. Student student=(Student)it.next();
  54. student.getName();
  55. }
  56. System.out.println();
  57. }
  58. }
  59. class School implements People{
  60. public String schoolName;
  61. public School (String name){
  62. this.schoolName=name;
  63. }
  64. private ArrayList gradeList =new ArrayList();
  65. public void add(Grade g){
  66. this.gradeList.add(g);
  67. }
  68. @Override
  69. public void getName() {
  70. System.out.println("学校:"+this.schoolName);
  71. Iterator it=gradeList.iterator();
  72. while(it.hasNext()){
  73. Grade g=(Grade)it.next();
  74. g.getName();
  75. }
  76. }
  77.  
  78. }

运行结果

  1. 学校:前途小学
  2. 年级:一年级
  3. 小明
  4. 小红
  5.  
  6. 年级:二年级
  7. 小亮
  8. 小华

java实现Composite(组合)模式的更多相关文章

  1. java设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...

  2. 一天一个设计模式——Composite组合模式

    一.模式说明 能够使容器与内容物具有一致性,创造出递归结构的模式就是Composite组合模式. 举个例子:计算机中的文件系统中有文件和文件夹的概念,我们知道,文件夹可以包含文件,也可以包含子文件夹, ...

  3. C++设计模式-Composite组合模式

    Composite组合模式作用:将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. UML图如下: 在Component中声明所有用来 ...

  4. 十一、Composite 组合模式

    原理: 代码清单 Entity public abstract class Entry { public abstract String getName(); public abstract int ...

  5. Composite组合模式(结构型模式)

    1.概述 在面向对象系统中,经常会遇到一些具有"容器性质"的对象,它们自己在充当容器的同时,也充当其他对象的容器. 2.案例 需要构建一个容器系统,需要满足以下几点要求: (1). ...

  6. 设计模式08: Composite 组合模式(结构型模式)

    Composite 组合模式(结构型模式) 对象容器的问题在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即他们在充当对象的同时,又是其他对象的容器. public interface I ...

  7. JAVA设计模式之组合模式(composite)

    组合模式:树状结构专用模式 代码如下: package com.srr.dp.composite; import java.util.ArrayList; import java.util.List; ...

  8. Composite 组合模式

      简介         <大话设计模式>一书中组合模式的定义为:将对象组合成[树]形结构以表示[部分-整体]的层次结构,组合模式使得用户对[单个对象]和对[组合对象]的使用具有一致性. ...

  9. Composite 组合模式 树 递归 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. 5.迪米特法则(Law Of Demeter)

    1.定义 狭义的迪米特法则定义:也叫最少知识原则(LKP,Least Knowledge Principle).如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中的一个类需要 ...

  2. php中curl不支持https的解决办法

    在php程序中使用curl去访问https站点时,报错:Protocol https not supported or disabled in libcurl 该错误信息表示php当时编译时使用的cu ...

  3. JS瀑布流布局模式(1)

    在实际的项目中,偶尔会用到一种布局——瀑布流布局.瀑布流布局的特点是,在多列布局时,可以保证内容区块在水平方向上不产生大的空隙,类似瀑布的效果.简单的说,在垂直列表里,内容区块是一个挨着一个的.当内容 ...

  4. linux文档编辑

    编辑某个文档: 可以直接编辑的如你有文档aa,可以用vi aa [注意:必须在AA所在的目录下]: 如果没有文档而且你又想编辑就可以直接编辑vi aa[名字你可以随便命名]; 也可以先建立一个文档to ...

  5. windows下如何github ssh 公钥

    windows下如何github ssh 公钥   1. 安装git,从程序目录打开 "Git Bash"  2. 键入命令:ssh-keygen -t rsa -C " ...

  6. 终端I/O之stty命令

    所有的终端选项标志,在程序中都可用tcgetattr和tcsetattr函数(http://www.cnblogs.com/nufangrensheng/p/3576682.html)进行检查和更改. ...

  7. 浅谈 qmake 之 pro、pri、prf、prl文件

    尽管每次和cmake对比起来,我们总是说 qmake 简单.功能少.但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmake内 ...

  8. 微软发布屏蔽Win10升级的官方办法

    微软发布屏蔽Win10升级的官方办法 导读 微软似乎从来就没有像现在这么焦燥过,当然了,攸关生死,他要还是能"蛋"定得住,那才真叫怪了.你看,为了推广Windows 10,一向傲娇 ...

  9. 网络传输速度bps与下载文件所需时间的换算

    相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就 ...

  10. tachyon 命令行接口

    Usage: tachyon COMMAND where COMMAND is one of: format [-s] 格式化Format Tachyon (如果指定 -s 参数,表示在 underf ...