设计模式(8)-结构型-组合模式(Composite)
组合模式是结构型设计模式中使用频率非常高的模式之一。 通常它将一个对象包装成树型结构,以表示“整体”与“部分”的层次结构,从用户的角度来看,单个对象与组合对象,看起来,具有一致的接口。
适用性描述:
参与者描述:
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