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

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

理论:将对象组合成树形结构以表示“部分-整体”的层次结构。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. 201521123011《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. XMind 2. 书面作业 1.clone方法 1.1 O ...

  2. 201521123070 《JAVA程序设计》第4周学习总结

    1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. http://naotu.baidu.com/file/4de6f42e4f4f6cce0531dd9997b04e60?token ...

  3. 201521123038 《Java程序设计》 第二周学习总结

    201521123038 <Java程序设计> 第二周学习总结 1.本章学习总结 学会在Java程序中使用函数,使程序层次更清晰 使用StringBuilder编写代码,减少内存空间的占用 ...

  4. 201521123074 《Java程序设计》第2周学习总结

    1.本周学习总结 学习了string类的一些用法,Java编写大致与c相同,但是要注意Java是面向对象的语言.例如两个字符串"=="比较,Java与c可能会有不同结果. 学习了i ...

  5. java课程设计-算术运算测试

    1. 团队名称.团队成员介绍 团队名称:cococo 团队成员 组长:网络1514叶城龙 201521123109 组员:网络1514余腾鑫 201521123108 2. 项目git地址 http: ...

  6. Eclipse rap 富客户端开发总结(8) : 发布到tomcat后解决rap编码和字符集的问题

    1 .解决 rap 字符集乱码的问题 字符集问题,解决办法:   在plugin.xml - build.properties 中添加 javacDefaultEncoding.. = UTF-8   ...

  7. 多个版本的Python如何设置不冲突

    同时装有Python2.7和Python3.5说明. 问题1: 设置右键点击"Edit with IDLE"选项打开的Python版本? 在运行输入"regedit&qu ...

  8. Java NIO vs IO

    NIO :http://tutorials.jenkov.com/java-nio/index.html IO:http://tutorials.jenkov.com/java-io/index.ht ...

  9. MyBatis学习(五)resultMap测试

    resultMap是MyBatis最强大的元素,它的作用是告诉MyBatis将从结果集中取出的数据转换成开发者所需要得对象. 接下来我们对resultMap进行一个简单测试.(当所需要返回的对象是一个 ...

  10. 02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维

    以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...