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

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

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

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 集合部分:TreeMap实现类:对键值进行排序. Map的entrySet Set<Map.Entry&l ...

  2. 201521123026 《Java程序设计》第6周学习总结

    1. 本章学习总结 请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结 2. 书面作业 Q1.clone方法 1.1 Object对象中的clone方法是被prot ...

  3. 《JAVA程序设计》第13周学习总结

    1. 本章学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. GET / HTTP/1.0可以返回一个HTML格式的文本页 IP地址可以用来标识网络上的主机 Socke ...

  4. 201521123086 《Java程序设计》第9周学习总结

    本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. (1)使用try...catch语句捕获异常(try块后可跟一个或多个catch块,注意子类异常要放在父类异常前面,否则子 ...

  5. 201521123011《Java程序设计》 第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  6. 201521123096《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 (1)互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  7. java课程设计-猜数游戏(201521123029 郑佳明)

    1.团队课程设计博客链接 http://www.cnblogs.com/m1ng123/p/7056740.html 2.个人负责模板或任务说明 猜数运行3个主界面即相关功能 玩家信息存储的play类 ...

  8. thinkphp创建对象及数据操作

    ThinkPHP有三种创建控制器对象的方式: 通过命名空间的路径找到类然后new出来例如:$dx = new \Home\Controller\IndexController(); 通过A快捷函数创建 ...

  9. Java :BufferedWriter类和BufferedReader类的构造方法、主要方法

    BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以效率比没有缓冲区的高. 一.BufferedWriter 类 构造方法:buffered ...

  10. 如何用一天时间实现自己的RPC框架

    前言 最近,闲来无事,自己写了一个简单的RPC框架,我把它叫做SimpleRpc.它有多简单?一共只有1400行代码.这个RPC只是作为自己试验作品,交流技术之用,当然如果你敢用,也可以放到生产环境之 ...