文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:38
字数 221
阅读 12
收藏 0
点赞 0
评论 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/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
设计模式总结(二)

设计模式可分为三种:创建型设计模式,结构型设计模式和行为型设计模式。 一、创建型设计模式 在设计模式中,创建型设计模式处理对象创建过程的设计模式,它根据实际情况来决定具体怎样创建对...

邵鸿鑫 ⋅ 2014/05/02 ⋅ 0

PHP设计模式(二):结构模式

上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式。(我的分享里面有) 一、什么是结构型模式? 结构...

juhenj ⋅ 2014/05/15 ⋅ 1

创建型、结构型、行为型模式(1)

目的 创建型模式 Creational Pattern 结构型模式 Structural Patterns 行为型模式 Behavioral Pattern 概念 创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何...

晨曦之光 ⋅ 2012/04/24 ⋅ 0

php设计模式(三):结构模式

一、什么是结构型模式? 结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。 二、结构型模式的种类: 适配器模式 桥接模式 装饰模式 组合模式 外观模...

peasant ⋅ 2016/05/26 ⋅ 0

设计模式之7个结构型模式

结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式概述 结构...

randy_shandong ⋅ 2017/01/12 ⋅ 0

GOF设计模式分类

  GoF模式的分类   1.根据目的准则分类     就是说,指定的模式用来完成什么样的工作。可分为三种:     (1) Creational (创建型):与对象创建有关。     (2) Structural (结...

forest13 ⋅ 2013/09/21 ⋅ 0

一天一种设计模式之七-----装饰模式

一.装饰模式定义 装饰模式属于结构型模式 装饰模式动态的给一个对象添加一些额外的职责。就增加功能来说,decorator模式相比生成子类更加灵活 适用性 在不影响其他对象的情况下,以动态、透明...

tongqu ⋅ 2016/03/14 ⋅ 0

剑指Offer——知识点储备-设计模式

剑指Offer——知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化); (2)里氏替换(任何父类出现的地方子类都可以替换); (3)依赖倒置...

sunhuaqiang1 ⋅ 2016/11/07 ⋅ 0

一句话总结23种设计模式则

1. 前言 断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。 2. 设计原则 设计原则的介绍 : 设计模式的六大原则 即使我们之前没有专门看过这...

四月葡萄 ⋅ 01/05 ⋅ 0

一天一种设计模式之八-----组合模式

一.组合模式简介 组合模式属于结构型模式 将组合模式合成树形结构以表示“部分-整体” 的层次结构。“Composite”使得用户对单个对象和组合对象的使用具有一致性。 适用性: 你想表示对象的部...

tongqu ⋅ 2016/03/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【elasticsearch】 随笔 Date datatype

一。时间类型的本质 首先json是没有时间类型的,对于es来说,时间类型的标示可以是下面三种情况 1.一个时间格式的字符串,如:"2014-11-27T08:05:32Z","2015-01-01" or "2015/01/01 12:10:3...

xiaomin0322 ⋅ 30分钟前 ⋅ 0

阿里云资源编排ROS使用教程

阿里云资源编排ROS详细内容: 阿里云资源编排ROS使用教程 资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、...

mcy0425 ⋅ 32分钟前 ⋅ 0

适配器设计模式

1、适配器模式 把一个类的接口变换成客户端所期待的另一种接口 使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 分为类的适配器模式和对象的适配器模式 2、类适配器模式 类的适配...

职业搬砖20年 ⋅ 36分钟前 ⋅ 0

npm操作报错 _stream_writable.js:61

有一天 不知道什么原因(估计和node的版本有关),无论你做什么npm的操作 都会报错/usr/local/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_writable.js:61 这时候只要执...

lilugirl ⋅ 40分钟前 ⋅ 0

Eclipse安装插件的几种方式

Eclipse魅力之一就是支持可扩展的插件,来丰富自身的功能,这种方式也是建立在开源思想之上的。具体使用什么方式去安装插件,要看我们拿到的是什么。 1. 拿到的是一串URL,如http://subclips...

GordonNemo ⋅ 42分钟前 ⋅ 0

div图片叠加

css实现代码如下: <div style="position: relative;"><!--这个层为外面的父层,需设置相对位置样式--> <div style="position: absolute;"><!--子层,需设置绝对位置样式--> <i......

niithub ⋅ 44分钟前 ⋅ 0

作用域slot

如果父组件需要使用子组件中的内容怎么办,比如父组件需要控制子组件的显示 <div id="root"><child><template slot-scope="props"><h1>{{props.item}} <div>编辑</div></h1><......

金于虎 ⋅ 47分钟前 ⋅ 1

HongHu commonservice-eureka 项目构建过程

上一篇我们回顾了关于 spring cloud eureka的相关基础知识,现在我们针对于HongHu cloud的eureka项目做以下构建,整个构建的过程很简单,我会将每一步都构建过程记录下来,希望可以帮助到大家...

明理萝 ⋅ 49分钟前 ⋅ 1

xml和对象的相互转化

@Data//setter和getter方法,toString和equals,hashcode方法@EqualsAndHashCode//代表重写equals和hashcode方法@XmlAccessorType(XmlAccessType.FIELD)public class Classroom {@X......

拐美人 ⋅ 50分钟前 ⋅ 0

tableView cell的高度 分组头部尾部的高度 自适应

@property (nonatomic) CGFloat rowHeight; // default is UITableViewAutomaticDimension@property (nonatomic) CGFloat sectionHeaderHeight; // default is UITableViewA......

娜一片蓝色星海 ⋅ 51分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部