组合模式是结构型设计模式中使用频率非常高的模式之一。 通常它将一个对象包装成树型结构,以表示“整体”与“部分”的层次结构,从用户的角度来看,单个对象与组合对象,看起来,具有一致的接口。
适用性描述:
-
你想描述的对象,具有部分-整体的层次结构
-
用户希望能忽略组合对象与单个对象的不同,用户将统一的使用的使用组合结构中的所有对象
参与者描述:
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 pieces;
-
-
public List 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();
-
}
-
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
阅读(1936) | 评论(0) | 转发(0) |