文档章节

结构型模式之三:组合模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:38
字数 221
阅读 28
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

组合模式是相对简单,但是他在很多设计中使用,想SWT,eclipse的工作空间,等等。他基本上产生了一个继承树,能通过使用一个统一的方法访问。

类图

 

下面的代码实现了下面的树结构 

 

java代码

import java.util.List;
import java.util.ArrayList;
 
//Component
interface Component {
    public void show();
}
 
//Composite
class Composite implements Component {
 
  private List childComponents = new ArrayList();
 
  public void add(Component component) {
    childComponents.add(component);
  }
 
  public void remove(Component component) {
    childComponents.remove(component);
  }
 
  @Override
  public void show() {
    for (Component component : childComponents) {
      component.show();
    }
  }
}
 
//leaf
class Leaf implements Component {
  String name;
  
  public Leaf(String s){
    name = s;
  }
  
  public void show() {
    System.out.println(name);
  }
}
 
public class CompositeTest {
  public static void main(String[] args) {
    Leaf leaf1 = new Leaf("1");
    Leaf leaf2 = new Leaf("2");
    Leaf leaf3 = new Leaf("3");
    Leaf leaf4 = new Leaf("4");
    Leaf leaf5 = new Leaf("5");
 
    Composite composite1 = new Composite();
    composite1.add(leaf1);
    composite1.add(leaf2);
 
    Composite composite2 = new Composite();    
    composite2.add(leaf3);
    composite2.add(leaf4);
    composite2.add(leaf5);
 
    composite1.add(composite2);
    composite1.show();
  }
}

以上文章翻译自: http://www.programcreek.com/2013/02/java-design-pattern-composite/

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
REST/HTTP 工具包--Spray

Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化和可测试是 spray 的特点。 示例代码: val responses: F...

匿名
2013/02/20
7.1K
0
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
C++的JSON解析类--JSONVALUE

Jsonvalue 是 C++ 的 JSON 类,用来解析 JSON 到 C++ 对象,也可将对象转成 JSON 字符串。支持 ANSI 和 Unicode。特点: 严格和松散模式 不同数据类型 简单 API 仅依赖 STL 示例代码: JSON...

匿名
2013/03/10
3K
1
开源数据访问组件--Smark.Data

Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操作;采用基于条件驱动的操作模式,使数据操作更简单轻松;内部通过标准SQL...

泥水佬
2013/03/12
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

jQuery Ajax调用后如何管理重定向请求 - How to manage a redirect request after a jQuery Ajax call

问题: I'm using $.post() to call a servlet using Ajax and then using the resulting HTML fragment to replace a div element in the user's current page. 我使用$.post()使用Ajax调用......

javail
51分钟前
15
0
没有指定分支的“git push”的默认行为 - Default behavior of “git push” without a branch specified

问题: I use the following command to push to my remote branch: 我使用以下命令推送到我的远程分支: git push origin sandbox If I say 如果我说 git push origin does that push ch......

技术盛宴
今天
21
0
为什么在允许某些Unicode字符的注释中执行Java代码?

问题: The following code produces the output "Hello World!" 以下代码生成输出“Hello World!” (no really, try it). (不,真的,试试吧)。 public static void main(String... args......

富含淀粉
今天
18
0
什么是按位移位(位移)运算符以及它们如何工作? - What are bitwise shift (bit-shift) operators and how do they work?

问题: I've been attempting to learn C in my spare time, and other languages (C#, Java, etc.) have the same concept (and often the same operators) ... 我一直在尝试在业余时间学习......

法国红酒甜
今天
32
0
OSChina 周二乱弹 —— 卧槽 李荣浩的契约兽啊

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《红色的回忆》- 痛仰乐队 手机党少年们想听歌,请使劲儿戳(这里) 动弹, 又好多...

小小编辑
今天
89
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部