读书人

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

发布时间: 2012-11-22 00:16:41 作者: rapoo

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

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

适用性描述:

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

设计方式(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


读书人网 >操作系统

热点推荐