</p> public Iterator iter() { return null; }$ u# k0 u9 D* \. n3 b
public Equipment(final String name) { this.name=name; }7 Z( ^- s" `5 w; Z3 Q0 z/ V/ p+ b9 U
}/ U, Z9 c5 I! j4 X: k; l
抽象类Equipment就是Component定义,代表着组合体类的对象们,Equipment中定义几个共同的方法。8 L, k6 Y4 o' {( A. S6 k
public class Disk extends Equipment
- z: `( H# u9 c: H$ b {
$ A: e: H& ^; d& ~ public Disk(String name) { super(name); }! ~5 f+ ^8 t8 d5 \: A8 C
//定义Disk实价为1' L* D1 r) n6 Q, `- ?2 ]8 G$ P
public double netPrice() { return 1; }8 ? N2 x p. ~
//定义了disk折扣价格是0.5 对折。
* O2 Y8 q' p2 G, L4 y6 Z3 b public double discountPrice() { return 0.5; }
; A. h1 O) s" Z* g0 i. d3 h }2 g3 V+ O7 F- _9 q( u" p. N$ [; q0 k' ?
Disk是组合体内的一个对象,或称一个部件,这个部件是个单独元素( Primitive)。
" b& M6 F* `% W; A9 N 还有一种可能是,一个部件也是一个组合体,就是说这个部件下面还有'儿子',这是树形结构中通常的情况,应该比较容易理解。现在我们先要定义这个组合体:
5 ~* x, g% H# J" ~" d7 q) ]2 Z6 N9 O8 @ abstract class CompositeEquipment extends Equipment
2 K3 w. u; v8 W" @! i$ S {# P+ F' k2 p K+ {6 N1 h& N
private int i=0;3 ~/ \' ^ M4 c! P* @" j1 I5 {
//定义一个Vector 用来存放'儿子'
4 \. o- Y6 r* w6 N- s private Lsit equipment=new ArrayList();
, Z$ [% Y6 E0 e7 g% q public CompositeEquipment(String name) { super(name); }
3 U) B, q* W P1 r public boolean add(Equipment equipment) {
# @& s! ^3 Z. t" y+ h9 f! e7 S this.equipment.add(equipment);; X( B7 ^0 Z5 D# i9 x8 T* F! _
return true;
# J* ^0 N: d! P2 d }
( j- r0 H, j, t- I public double netPrice() C, Y* G! ~" s+ Y
{
' H, q1 B( n0 R* R double netPrice=0.;
- z s/ V( W4 B Iterator iter=equipment.iterator();7 q4 _$ `1 ]6 g3 b
for(iter.hasNext()) H! [ e7 i% ?* S8 j& U4 v4 F' l
netPrice+=((Equipment)iter.next()).netPrice();( A' ]1 [4 l8 ?% u; R C, F
return netPrice;( O X I+ B5 J- _7 n
}: _, Q9 x- I% N: T3 x
public double discountPrice()% i) J; R" C: B" e- T! m# V( H) T
{
8 s, l6 z5 K* p6 E b& z9 R. J/ }- I double discountPrice=0.;
8 o4 V4 x. l2 Z8 W Iterator iter=equipment.iterator();
2 G+ J. p* t6 Y, X$ w4 E, |1 L1 [ for(iter.hasNext())
O/ g% J [/ j, p8 ~- ~ discountPrice+=((Equipment)iter.next()).discountPrice();
5 i" l) P; l& `) g; [6 r, D) |* k return discountPrice;
/ [% e8 m* G5 }( f }
( j& x* n& q3 l1 u5 m8 y- A //注意这里,这里就提供用于访问自己组合体内的部件方法。
7 X1 R" V( ~9 P; y! ?5 s! n' T
" y+ u9 ]% ~+ x, s$ @ //上面dIsk 之所以没有,是因为Disk是个单独(Primitive)的元素. |