`

设计模式(8)-结构型-组合模式(Composite)

 
阅读更多

组合模式是结构型设计模式中使用频率非常高的模式之一。 通常它将一个对象包装成树型结构,以表示“整体”与“部分”的层次结构,从用户的角度来看,单个对象与组合对象,看起来,具有一致的接口。

适用性描述:

  1. 你想描述的对象,具有部分-整体的层次结构
  2. 用户希望能忽略组合对象与单个对象的不同,用户将统一的使用的使用组合结构中的所有对象

参与者描述:

    1.Component
      为组合中的对象声明接口。
      在适当的情况下,实现所有类共有接口的缺省行为。
      声明一个接口用于访问和管理Component的子组件。
      (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。

    2.Leaf
      在组合中表示叶节点对象,叶节点没有子节点。
      在组合中定义节点对象的行为。

    3.Composite
      定义有子部件的那些部件的行为。
      存储子部件。
      在Component接口中实现与子部件有关的操作。

    4.Client
      通过Component接口操纵组合部件的对象。

示例:

package com.sql9.structured;

import java.util.ArrayList;
import java.util.List;

//字符片段
abstract class Piece {
    // 统计字数
    public abstract int count();
    
    public abstract void add(Piece p);
    public abstract void remove(Piece p);
    
    protected List<Piece> pieces; 
    
    public List<Piece> getPieces() {
	return pieces;
    }
    
}

class Sentence extends Piece {
    String word;
    public Sentence(String word) {
	this.word = word;
	pieces = null;
    }
    
    public int count() {
	return word == null ? 0 : word.length();
    }
    
    public void add(Piece p) {
	
    }
    
    public void remove(Piece p) {
	
    }
}

class Paragraph extends Piece {
    public Paragraph() {
	pieces = new ArrayList<Piece>();
    }
    public int count() {
	int count = 0;
	for (Piece p: pieces) {
	    count += p.count();
	}
	return count;
    }
    
    public void add(Piece p) {
	pieces.add(p);
    }
    
    public void remove(Piece p) {
	pieces.remove(p);
    }
}

public class CompositeTest {

    public static void main(String[] args) {

	Piece child = new Sentence("abcde");
	Piece child2 = new Sentence("123");
	Piece child3 = new Sentence("456789");
	Piece para = new Paragraph();
	Piece para2 = new Paragraph();
	para.add(child);
	para.add(child2);
	para2.add(child3);
	para2.add(para);
	
	int count = para2.count();
	System.out.println("count of para2 = " + count);
    }

}

结果:

count of para2 = 14


<script type="text/javascript"><!-- google_ad_client = "ca-pub-7104628658411459"; /* wide1 */ google_ad_slot = "8564482570"; google_ad_width = 728; google_ad_height = 90; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
分享到:
评论

相关推荐

    c++设计模式-结构型模式-组合模式

    组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    2. **结构型模式**:这类模式关注如何组合对象和类,以形成更大的结构。 - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):提供一个统一的接口,用来访问子系统的一组...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    组合模式(Composite Pattern)-结构型模式 (0%) &lt;br&gt;讲义书写模式 在实际的讲解中我会用一套模式来讲述我对设计模式的理解 1.给出当前章节模式的名称 2.讲述一个小故事,提出问题 3.回答这个...

    设计模式面面观(11):组合模式(Composite Pattern)-结构型模式

    组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,部分和整体通过统一的接口进行交互,这种“部分”和...

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式1-创建型模式

    结构型模式包括Adapter(适配器)、Bridge(桥梁)、Composite(组合)、Decorator(装饰者)、Flyweight(享元)等。这些模式解决了对象的组合问题,提供了一种通用的解决方案。 行为型模式包括Interpreter(解释...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    结构型模式 - **Bridge模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **Adapter模式**:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,具体到第9篇讨论的是“Composite组合模式”。这一模式属于结构型模式的一种,旨在解决...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责,可以独立于...

    java设计模式---诙谐易懂版

    设计模式一般分为三大类:创建型模式、结构型模式和行为型模式。 3. 根据文件内容,诸葛亮给赵云的三个锦囊妙计可以用策略模式来实现。每个妙计对应一个实现了策略接口的具体策略类。例如,BackDoor类实现了...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码.pdf

    2 结构型模式.................................................................................................................................33 2.1 Bridge模式.............................................

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

Global site tag (gtag.js) - Google Analytics