You are on page 1of 25

Posted on Thng Hai 23, 2013by haihth

CHNG VIII: X L TP HP VI MU ITERATOR V MU COMPOSITE Trong chng ny: S dng mu Iterator (i tng lp li) To mt i tng Iterator Duyt qua danh sch cc ph gim c bng mt Iterator ni ti Hiu c mu Composite (tp hp) S dng mt Iterator bn trong mt Composite

Gim c iu hnh ca cng ty GianDataPool, mt cng ty m bn mi chuyn n vi v tr t vn, va i kh vo phng lm vic ca bn v ni lm bm g . G vy? bn hi. V gim c nhn quanh vi v mt b mt, v ni Ti c mt d n tuyt mt dnh cho bn Tuyt mt? bn ni N ni v ci g? ng to ting! v gim c ni kh. Chng ta cn mt ngi khch quan cho chuyn ny, V vy ti mi gp anh. Chng ta dng nh ang gp phi mt s vn vi vic qun tr v chng ta cn phi theo di cc ph gim c Khng ai c bit vic ny. By gi, c th c hai hay vi v ph gim c lm vic nh mt lp trnh vin vy Tha thy thiu th, bn th di Chuyn di tp ca cc cng ty Chng ta bt u vi khu vc bn hng, v gim c ni kh Anh c th vit mt chng trnh duyt qua ht h s v in chng ra ch? Cn hn th na, bn ni. Ti s s dng mu Iterator Chng ny ni v hai mu c quan h mt thit vi nhau: mu Iterator v mu Composite. Mu Iterator cung cp cho bn cch thc truy cp mt b phn bn trong mt i tng m khng cn phi hiu r cu trc ni ti ca i tng . V d, hng

Sun gii thiu mt kiu tp hp trong vic biu din cc mi quan h trong ngn ng Java, nhng tp hp ny cho php bn to iterator mt i tng c bit c thit k cho php bn truy cp mt phn t ca tp hp cung cp mt cch thc truy cp d dng. Mu Composite cng ni v tp hp. Vi mu Composite, tng l bn c th mt cu trc hnh cy ni m tng i tng s thuc v mt ci cy -l mt nt l khng c nt con, hoc l mt nhnh cy vi nhiu nt l con c th x l trong cng mt cch. Mu Composite c thit k cho php bn x l nhiu i tng khc chng loi trong cng mt tp hp theo cng mt cch, v mt i tng lp iterator li v tnh ph hp ti y dng x l tng phn t ca mt nhnh cy v d, bn c th duyt qua ht cy. Chng ta s tho lun v hai mu trong chng ny. Truy cp i tng vi mu Iterator Khi bn lm vic vi mt tp hp nhiu i tng, mu Iterator l mt gii php tt. Hng ngy, bn phi lm vic vi nhiu loi tp hp nh cu trc cy, cy nh phn, mng, vng m, bng bm, danh sch mng v vn vn Cch thc m tp hp ny lu tr i tng ca n rt khc nhau, v nu bn mun truy cp d liu ca nhng i tng ny, bn phi hc nhng k thut khc nhau cho tng loi tp hp. V l ni mu Iterator xut hin. Bn c th s dng mt giao din interface c xc nh r rng truy cp ti tng phn t ca tp hp. Trong nhng nm qua, cc phng php c bn dn tr nn thch hp hn, v chng cng xut hin xuyn sut chng ny. S dng nhng phng php ny, bn c th truy xut ti cc phn t trong tp hp theo cch c bn nht. Ghi nh: Theo sch ca Gang of Four (Gof), bn c th s dng mu thit k Iterator Cung cp mt cch thc truy cp tun t ti cc phn t ca mt i tng tng hp, m khng cn phi to dng ring cc phng php truy cp cho i tng tng hp ny Ni cch khc, mt Iterator c thit k cho php bn x l nhiu loi tp hp khc nhau bng cch truy cp nhng phn t ca tp hp vi cng mt phng php, cng mt cch thc nh sn, m khng cn phi hiu r v nhng chi tit bn trong ca nhng tp hp ny.

Gi : Mu thit k Iterator c bit quan trng khi tp hp bn ang xy dng c to thnh t nhng tp hp con ring r, v d khi bn chnh sa bng bm vi danh sch mng, chng hn. Thng tin: Iterator thng c vit trong Java nh l nhng lp c lp. Ti sao nhng Iterator c th lm vic c trong cc tp hp khc nhau? Chng c th, nhng trong Java, cn ngn ng khc, chng khng th. tng thit k ny l mt trong nhng k thut c gi l n trch nhim mt lp ch c duy nht mt cng vic lm. Hy suy ngh rng tp hp duy tr cc phn t, mt iterator cung cp cch thc lm vic vi cc phn t . Tch bit trch nhim gia cc lp rt hu dng khi mt lp b thay i Nu c qu nhiu th bn trong mt lp n l, s rt kh khn vit li m ngun. Khi din ra s thay i, mt lp n trch nhim s ch c mt l do duy nht thay i. Truy cp i tng ca bn vi mt Iterator Bn bt u lm vic vi rc ri gim c, l phi theo di cc ph gim c. Trong trng hp ny, bn quyt nh lu cc ph gim c vo trong mt tp hp, vi mt tp hp cc chc nng cho php truy xut cc v ny. Trong phin bn u tin ny, cc chc nng c bn m mt Iterator phi c nh sau:

Ngy ny Java h tr mt giao din iterator trong java.util.Iterator, c nh ngha vi ba phng php sau:

Hm next tr v phn t k tip trong tp hp, hm hasNext tr v gi tr True nu vn cn phn t trong tp hp v tr v false trong trng hp ngc li, hm remove cho php bn g b mt phn t trong tp hp.

l cch Iterator lm vic N cung cp mt giao din n gin, nht qun lm vic vi cc tp hp khc nhau. Gi s rng khch hng phi lm vic vi mt tp hp phc tp v rc ri ( nh hnh sau) v khng bit cch thc lm vic vi n nh th no.

Khch hng c th s dng iterator lm cu ni vi tp hp, v khch hng c th s dng cc phng thc c bn ca Iterator giao tip vi tp hp. Nh hnh sau:

Cng vic u tin khi lu tr d liu cc ph gim c cng ging cch trn. Bn quyt nh, u tin l to mt lp lu tr thng tin cho tng ph gim c, vi tn lp VP ( Vice President ph gim c, ph ch tch.. ) Bn phi to bn thnh phn quan trng trong lp ny, bao gm: Mt hm khi dng cho php truyn gi tr tn ca v ph ny Tn khu va lm vic ca v ph Hm getName tr v tn ca ngi ny

Hm print cho php in ra thng tin ca v ph ny, bao gm tn v khu vc lm vic

Lp ny ng gi thng tin mt ph gim c. By gi ta phi lu tr tt c gim c trong mt lp. Thu thp cc ph gim c vo mt tp hp: Trong v d ny, bn to tp hp cc ph gim c da trn mng cn bn ca Java. L do dng kiu cn bn ny, thay v dng cc chc nng c sn trong Java nh vector, danh sch mng, bn bm vi phn t Iterator c sn, l vic to Iterator t u lm vic vi tp hp th hi ng ngn, nhng rt tt hiu v mu ny. Bn quyt nh lu thng tin cc ph gim c trong tng khu vc, v d khu vc bn hng Sales, trong lp tn l Division

Hm khi dng ca lp Division s lu tr tn ca khu vc ny, v d Sales, v hm getNames s tr v tn

Cc ph gim c s c lu trong mt mng, tn l vPs, v bn c th thm mt ph gim c bng hm add nh sau:

Ni cch khc, i tng Division l mt tp hp, v i tng ph gim c VP l mt phn t ca tp hp ny. thm mt iterator, tp hp cn phi c mt hm tn bn c th t ty v d nh iterator chng hn (c th tn bao gm vic to createIterator v vic nhn getIterator). Hm ny s chuyn mng cc ph gim c vo hm khi dng ca lp iterator, ta gi tn lp ny l lp DivisionIterator. M nh sau:

Bc tip theo l to iterator, lp DivisionIterator, cho php bn lp xuyn qua tp hp cc ph gim c trong tp hp. To lp Iterator Lp iterator, DivisionIterator, hin thc ba hm trong giao din java.util.Iterator : hm nex, hm hasNext, v hm remove. M nh sau:

Hm khi dng chp nhn mt mng cc phn t VP v lu tr li nh sau:

By gi bn phi hin thc cc giao din ca Iterator. Hm next tr v phn t k tip trong mng. M nh sau:

Hm hasNext tr v true nu c phn t k tip trong tp hp, ngc li tr v false. Trong trng hp ny, bn phi kim tr cui ca dy cha? Bi v bn ang lm vic vi mt mng c nh, bn cng phi kim tra nu phn t k tip l phn t trng (null) v bn cng phi kim tra xem mng c phi l rng hay khng. Hm hasNext nh sau:

Hin ti bn mun mng ph gim c ny ch c, bn tip tc hin thc hm remove vi ni dung rng nh sau:

Tuyt vi. Bn c i tng ph gim c, mt khu vc th hin nh mt tp hp cc ph gim c, v mt i tng lp Iterator. Vic cui cng l a tt c chng vo mt chng trnh v bt u lp qua cc ph gim dc Lp qua cc ph gim c Xem m sau:

M ngun bt u t vic to khu vc bn hng Sales v thm vo mt vi v gim c:

Sau ta to mt iterator bng cch gi hm iterator v s dng cc hm hasNext, next duyt qua tng ph gim c trong tp hp v hin th thng tin tng ngi mt.

Kt qu l, chng trnh in ra ton b thng tin cc ph gim c:

t mi th vo trong tp hp composites Gim c ca GianDataPool Inc, chy o vo vn phng bn vi v c thng v ni ln: Ti mun sa thi mt vi ph gim c! Tt, bn ni. Ti mun lm thm na. By gi ti cn in ra tt c thng tin ph gim c ca ton b cng ty khng ch khu vc bn hng, m l ton b cc khu vc. Tt c cc khu vc? bn hi. Vng. V c cc ph gim c hot ng c lp, khng trc thuc vo mt khu vc no . Hmm, bn ni , n lc s dng mt mu thit k mi. i , gim c ni Nh k rng y l mt v ct gim chi ph Ti s s dng mu tng hp composites, bn ni. C tn nhiu chi ph khng? Khng bn ni. nhng ti phi lm nhiu thi Bn hiu r rc ri. by gi bn phi x l ton b cng ty, khng ch l mt phn khu. Ton b cng ty c nhiu khu vc vi cc ph gim c, v khu vc ny c th bao gm c khu vc khc v bao gm c cc ph gim c t do na. Hnh sau ch ra m hnh cng ty:

V vy, gi y bn ang lm vic vi mt t chc phc tp, khng ch l mt khu vc bn hng Sales na. V gim c iu hnh mun bn in ra ton b cng ty, v vy bn khng ch cn hm print ca i tng VP, m tng khu vc phi c mt hm print ring. OK, n lc s dng mu tng hp Composite. Bn mun c mt hm print, m khi c gi, n s in ra thng tin ca mt ph gim c, mt phng ban, hoc c t chc. Mu Composites l mu ni v vic to ra mt cu trc hnh cy ni m tng l trong cy, c th c s dng trong cng mt cch vi nhnh ca n ( nhnh l cu trc cha nhiu l, v ging cc nhnh khc ). tng chnh y l, lm mi chuyn d dng, bn c th x l cc nt l v tp hp cc nt l trong mt ci cy theo cng mt cch. Ghi nh: Sch ca GoF ni rng, bn s dng mu Composites To ra cc i tng trong mt cu trc hnh cy biu din cho mt cu trc phn cp. Mu Composites cho php khch hng x l mt i tng ring hoc ton b i tng theo cng mt cch

l nhng g bn cn mt mu thit k cho php bn x l cc nt l hoc cc nhnh ca cu trc cy theo cch ging nhau bi v bn mun c th in ra thng tt c cc ph gim c ring l, trong mt khu vc, hoc c cng ty, ch bng cch gi hm print. Mu thit k Composites rt ph hp vi mu Iterator bi v khi bn gi tng khu vc in chnh n, n c th d dng duyt qua tng ph gim c mt. l c im in hnh ca mu Composite khi bn yu cu mt nhnh thc hin mt hnh ng g , n s lp qua tt c cc l con v nhnh con ca n. tng ng sau ca mu Composite l vic x l cc nt l v nhnh trong mt cu trc hnh cy s ging nhau. iu ny gip cho vic x l cc cu trc phc tp theo dng hnh cy s d dng hn bi v bn khng cn phi thit lp cc hm khc nhau cho tng phn ca cu trc. thc hin mu Composite, sch ca GoF khuyn rng bn nn s mt lp tru tng nh l mt lp c s cho c nt l v cc nhnh trong cu trc cy. Vic lm ny gip cho cc nt l v cc nhnh s c chung mt tp hp cc hm, l tt c nhng g mu Composite mun ni ti. Sch ca GoF ngh bn s dng mt lp tru tng, tuy nhin bn cng c th s dng mt giao din interface lm vic ny trong Java. Tt c bt u vi mt lp tru tng Ti s theo ch dn ca sch GoF v to mt lp tru tng cho c ph gim c cng nh khu vc, lp ny tn Corporate. Bn di l m ngun ca lp ny. Ch n cng c hm add, v hm iterator tr v mt iterator, v mt hm print:

y l lp dng k tha cho c cc nt l ph gim c v cc nhnh cy khu vc. To nt l ph gim c Lp VP bn to trc y phi chnh sa mt cht, bn c th thng nht cch lm vic vi c ph gim c v khu vc trong cng mt cy t chc, theo cch mu Composite ni. c bit, bn phi k tha lp VP t lp tru tng Corporate m bn to trong phn trn

Lp VP trc y ch cha tn v khu vc lm vic ca ph gim c v hm print in ra thng tin ny. Nhng khch hng c th x l lp VP cng cch vi cc khu vc division, bn cn thm mt hm to iterator cho n. Bi v mt ph gim c khng cha bt c ph gim c no, nn iterator c to ra ch to tr v mt i tng ph gim c duy nht khi bn gi hm next v hm hasNext lun tr v gi tr sai false. M nh sau:

Lp VPIterator s nh th no? Rt d dng, bn ch cn hin thc giao din Iterator ca Java, a vo i tng VP thng qua hm khi dng, to hm next tr v i tng v hm hasNext tr v gi tr false, nh m sau:

By gi khch hng c th x l nt l ph gim c ging nh mt nhnh cy khu vc. Thc t l iterator nt l ph gim c ch tr v duy nht mt ph gim c, nhng by gi bn c mt iterator cho tng nt l, bn khng phi chnh sa m ngun c th va lm vic vi nt l va lm vic vi cc phn khu. To mt nhnh cy cc khu vc Tng nhnh cy trong cu trc cy cng ty l mt khu vc trong cng ty, m c th bao gm nhiu ph gim c hoc khu vc con. x l khu vc, bn quyt nh chnh sa lp Division ( to trc y ) theo cch m rng t lp Corporate, nh cch lm vi lp VP, m ngun nh sau:

Phn cn li ca lp Division s ging nh trc, ngoi tr bn phi chuyn i mt cht ph vi i tng Corporate. Trc y, lp Division lu tr mt mng VPs cc ph gim c bi v bn ch lm vic vi mt khu vc ca cng ty. By gi bn phi lm

vic vi c cng ty, mt khu vc c th cha mt khu vc con nh l nhng mng cc ph gim c VPs. T khi c hai lp divison v mng VPs k tha t lp Corparate, bn c th d dng han chuyn lu tr v lm vic vi i tng Corparate trong lp Division ch rng hm print s duyt qua tt c cc i tng trong mt khu vc, cho d chng l mng VPs hay khu vc.

Bng cch chuyn i t vic x l lp VP bn trong mt khu vc division sang vic x l mt lp Corporate, gi y bn c th lu tr mng VPs v khc khu vc khc v v vy bn hin thc c mu Composite, cho php bn c th x l cc nt l hay nhnh cy theo cng mt cch. Iterator ca lp division, c hin thc t lp DivisionIterator, m nh sau:

Bn ng ngi ra trong gh vi n ci hi lng trn mi, thm cm n mu thit k Composite. lm mt s chuyn i t v d mt khu vc trong phn u ca chng ny, sang mt mt cu trc hnh cy cho ton b cng ty, tt c nhng g bn phi lm l bo m rng tt c cc i tng trong cng mt cy phi da trn cng mt lp, v hin thc cng mt tp hp cc hm, cho php chng c s dng theo cng mt cch. Xy dng cng ty ca bn Bn c ph gim c; bn c cc khu vc. By gi l lc bn xy dng mt cng ty cha chng. gia cho mi vic n gin, bn c th s dng mt ArrayList lu tr cc khu vc divisions v cc ph gim c trong cng ty. Tt c cc i tng trong cng ty u l i tng Corporate, v vy ArrayList s lu tr cc i tng Corporate.

Khi bn mun thm mt i tng Corporate vo cy, ch cn s dng hm add ca corporate, hm s thm mt i tng mi vo ArrayList.

Mun in ra thng tin tt c cc i tng trong cng ty? Ch cn gi hm print ca i tng Corporate, khi cc iterator trong ArrayList s in ra thng tin trong cc khu vc v cc ph gim c ca ton cng ty ch rng khi bn gi hm print ca khu vc division, n s duyt qua ton b cc i tng bn trong, v gi tng hm print ca chng. V vy khi gi hm print t cp cao nht ca Corporate, n s in ra ton b thng tin ca cng ty.

OK. n lc cho chng trnh chy th. u tin bn to mt i tng Corporation.

Sau bn to khu vc R&D v to ra mt vi ph gim c

Tip theo, bn to khu vc Sales. Bn s dng hm add thm khng ch cc ph gim c m cn c th thm c cc khu vc con, v d khu vc Western Sales, vi mt s ph gim c

V bn c th thm cc ph gim c vo cng ty mt cch trc tip, cng ging nh cch thm vo mt khu vc, bi v bn c th x l cc nt l v cc nhnh con theo cng mt cch. Sau khi to mt ph gim c, bn c thm ph gim c v khu vc bn to trc vo cng ty v in tt c thng tin chng ra vi mt hm duy nht l hm print ca i tng corporation, hm ny s gi hm print ca tng phn t bn trong n.

Chy chng trnh, v bn nhn c kt qu.

Bn a danh sch thng li ny ti cho v Gim c iu hnh. ti lc ct ta bt ci cy ny, bn ni.

H? Gim c hi Loi b nhng cnh cy cht, bn ni. Gim c ci hnh phc. Download source here

You might also like