下面来学习一下组合模式。

组合模式概念是什么呢。从别的地方抄来了一些理论。

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

拙见:组合模式就是为处理树形结构优化出来的一套理论方法。-_-!!!用递归可以统一处理树形结构中的对象。

下面直接上代码。

总公司  --分公司

          --分公司下属分公司

          --分公司下属办事处

       --分公司办事处

接口类ICompany。

 import java.util.List;

 public interface ICompany {
public void display();
public boolean add(ICompany company);
public boolean remove(ICompany company);
public List<ICompany> getChild();
}

公司类Company。

 import java.util.ArrayList;
import java.util.List; public class Company implements ICompany {
private String name;
private List<ICompany> children; public Company(String name) {
this.name = name;
this.children = new ArrayList<ICompany>();
}
@Override
public void display() {
System.out.println(name);
}
@Override
public boolean add(ICompany company) {
return children.add(company);
}
@Override
public boolean remove(ICompany company) {
return children.remove(company);
}
@Override
public List<ICompany> getChild() {
return children;
}
}

办事处类ConcreteCompany。

 import java.util.ArrayList;
import java.util.List; public class ConcreteCompany implements ICompany {
private String name; public ConcreteCompany(String name) {
this.name = name;
}
@Override
public void display() {
System.out.println(name);
}
@Override
public boolean add(ICompany company) {
return false;
}
@Override
public boolean remove(ICompany company) {
return false;
}
@Override
public List<ICompany> getChild() {
return null;
}
}

测试类MainClass。

 import java.util.List;

 /*
* 组合模式测试
*/
public class MainClass {
public static void main(String[] args) {
ICompany company = new Company("总公司");
ICompany company1 = new Company("分公司1");
ICompany company2 = new Company("分公司2");
ICompany company3 = new ConcreteCompany("分公司办事处");
company.add(company1);
company.add(company2);
company.add(company3); ICompany company11 = new Company("分公司1下属公司1");
ICompany company12 = new Company("分公司1下属公司2");
ICompany company13 = new ConcreteCompany("分公司1下属办事处");
company1.add(company11);
company1.add(company12);
company1.add(company13); ICompany company21 = new Company("分公司2下属公司");
ICompany company22 = new ConcreteCompany("分公司2下属办事处");
company2.add(company21);
company2.add(company22); displayAllCompany(company, );
} private static void displayAllCompany(ICompany rootCompany, int deep) {
for(int i = ; i < deep; i++)
{
System.out.print("-");
}
rootCompany.display();
List<ICompany> children = rootCompany.getChild();
for(ICompany company:children)
{
if(company instanceof ConcreteCompany)
{
for(int i = ; i <= deep; i++)
{
System.out.print("-");
}
company.display();
}
else
{
displayAllCompany(company, deep + );
}
} }
}

以上代码主要就是用递归方法遍历了公司的结构。

测试结果。

这个模式的精华都在代码里,大家自己体会吧。。。共同进步!!!

(@WhiteTaken)设计模式学习——组合模式的更多相关文章

  1. 设计模式学习--组合模式,c++代码

    下面是组合模式的UML类图: <span style="font-family:Microsoft YaHei;font-size:18px;"><span st ...

  2. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  3. 设计模式学习--复合模式(Compound Pattern)

    设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...

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

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

  5. c++设计模式15 --组合模式

    今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...

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

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

  7. JavaScript设计模式之----组合模式

    javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...

  8. C#设计模式(10)——组合模式(Composite Pattern)(转)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

  9. C#设计模式:组合模式(Composite Pattern)

    一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; ...

随机推荐

  1. 201521123079《java程序设计》第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boo ...

  2. 201521123117 《Java程序设计》第3周学习总结

    1. 本周学习总结: 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  3. 201521123006 《java程序设计》 第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) **1.2 ...

  4. 201521123069 《Java程序设计》 第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 Q1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jm ...

  5. 201521123115《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  6. 201521123015 《Java程序设计》第13周学习总结

    1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? IP地址不同 ...

  7. openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...

  8. SSM整合开发

    导入开发包 asm-3.2.0.RELEASE.jar asm-3.3.1.jar c3p0-0.9.jar cglib-2.2.2.jar com.springsource.net.sf.cglib ...

  9. BootStrap基礎知識

    BootStrap基礎知識 1. .lead //突出 .text-left //文字居左 .text-right //文字居右 .text-center //文字居中 .text-justify / ...

  10. mysql 实验论证 innodb表级锁与行级锁

    innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的. 表锁演示(无索引) Session1: mysql> set autocommit=0; mysql> select * ...