You are on page 1of 30

Posted on Thng Hai 23, 2013by haihth

CHNG 7: TO HNG LOT I TNG VI MU TEMPLATE (Khun Mu ) V MU BUILDER (Th Xy) Trong chng ny, chng ta i qua mt s ni dung sau:

S dng mu Template To r bt s dng mu template K tha mu template Hiu bit s khc bit gia mu Template v mu Builder S dng mu Builder

Tin tt, gim c GigundoCorp mt cng ty mi m bn ang nhn trch nhim t vn - va ni trong khi chy vo phng hp Chng ta nhn c hp ng Hp ng no?, mi ngi hi Hp ng v nhng con r bt t ng lp rp xe hi, v gim c ni. , th ra l hp ng Mi ngi ni. Gi th v phng v vit chng trnh thi, v gim c va ni v xua ui mi ngi ra khi phng hp Ch mt lt, bn ni Chng ta c nn dnh cht thi gian cho vn thit k khng? V d: c kh nng chng ta s to mt loi khc ca r bt trong tng lai chng hn Chc chn ri, v gim c ni. Chng ta c mt t h s d thu ngoi . Nhng khng c thi gian ngh v n u. Chng ta cn phi bt u to nhng con r bt t ng trc Vng, cc lp trnh vin rn r v mi ngi tr v phng ca mnh. C iu g mch bo vi ti rng h ang mc phi sai lm, bn t nh trong cn phng trng rng, ri rc nhng ly Styrofoam trng rng ln lc khp sn.

Chng ny ni ny v hai mu thit k gip bn c mt cch thc kho lo hn trong vic to dng cc i tng: mu Template Method v mu Builder. Mu Template Method cho php cc lp con nh ngha li cc bc to i tng, rt thch hp cho vic to ra cc chng loi r bt khc nhau. Mu Builder gip bn uyn chuyn hn trong vic to i tng v n tch ri qu trnh khi to ra khi bn thn i tng. C hai mu s c tho lun trong chng ny To con r bt u tin Cc lp trnh vin ca GigundoCorp xo nu ra phn mm ca h trong vi ngy v n va n gin. Lp robot bt u vi mt hm khi to nh sau:

V c mt s hnh ng m robot c th thc hin, v d nh, khi ng robot, bn gi hm bt u Start, robot lm vic, bn gi hm lp rp assemble, kim tra sn phm, bn gi hm kim tra test, v vn vn

V tt c nhng g bn cn l mt phng thc, tn l go , n s lm cho robot lm vic bng cch gi cc hm start, getParts, assemble, test v stop nh sau:

Bn c th nhanh chng vit chng trnh kim tra. u tin to mt robot v gi hm gonh sau:

V khi chy chng trnh, bn nhn c kt qu:

Tuyt vi, gim c iu hnh phn khch. Phn thng lun xung quanh. Ti ni vi anh rng h khng cn ci th mu thit k v vn. Cc lp trnh vin ca cng ty nm cho bn mt nh nhn d bu. To Robot vi Mu thit k Template Method Ngy tip theo, Tin tt, gim c iu hnh ca GigundoCorp la ln, trong khi phng vo phng hp. Chng ta k c hp ng khc! Hp ng khc no? Mi ngi hi Hp ng cho robot nng bnh V gim c ni Gi th ra khi y v vit phn mm cho n Cc lp trnh vin nhn vo trong ly c ph ca h Chng ta phi vit li tt c phn mm t u, h ni V gim c lic mt nhn bn v hi C tn nhiu chi ph khng? Rt nhiu, cc lp trnh vin ni. V bn th ang chng li s thc gic ni rng Ti ni vi cc anh t trc y l thi im thch hp ni v mu thit k Template Method. C mt rc ri m lp trnh vin GigundoCopr i mt, h c mt con robot t ng nh hnh sau:

Nhng by gi h cn mt con robot nng bnh nh hnh sau, v th l phi vit li m ngun t u:

Con robot nng bnh c mt s chc nng ging nh con robot lp rp t, nh l hmstart, stop, tuy nhin n c nhng s khc bit nh lp rp assemble s khng hin th Getting a carburetor m thay vo l Getting flour and sugar l ni m mu thit k Template Method c p dng. Mu ny ni rng, bn c th vit mt phng thc, dng xc nh mt lot cc thut ton, ging nh hm go m bn thy trc y, chy mt lot cc chc nng cho robot nh hnh:

Sau bn a hm ny vo mt b khun template bng cch cho php cc lp con nh ngha li cc bc thut ton theo cch cn thit. Trong trng hp ny, lm mt con robot nng bnh, bn s vit li cc hm getParts, assemble, v test. Theo nh ngha chnh thc ca sch GoF, mu Template Method nh sau: nh ngha mt b khung ca mt thut ton trong mt chc nng, chuyn giao vic thc hin n cho cc lp con. Mu Template Method cho php lp con nh ngha li cch thc hin ca mt thut ton, m khng phi thay i cu trc thut ton. iu ny c ngha l bn nn s dng mu Template Method khi bn c mt thun ton c to bi nhiu bc, v bn mun th ty chnh mt s bc trong . Ch rng nu bn mun vit li mi th t u khi mi bc u phi ty chnh li th bn khng cn dng template. To robot bng b khun Template

Nu bn c mt b khun Template da trn robot, bn c th cho n k tha nh hnh sau:

Bng cch gi hm go, tp hp cc thut ton s c thc hin. ty chnh trong lp k tha, bn ch cn vit li mt s bc no bn mun, trong trng hp robot nng bnh s nh hnh sau:

l tng ng sau mu thit k Template Method Mt chc nng bao gm nhiu bc s c ty chnh bi lp con. Trong trng hp bn cn hai robot, mt robot lp rp t, mt robot nng bnh, mi vic s nh th no? Bn bt u bng cch to mt b khun Template trong mt lp tru tng abstract ( lp khc c th k tha n), gi l RobotTemplate

V lp ny cng ci t vic thc hin mc nh cho tng chc nng trong hm algorithm, start, getParts, assemble, test v stop.

Nu mt con robot s dng ng cc phng thc ny, v d nh hm start v stop, chng ta khng cn phi vit li chng. Ngc li bn c th thay i cc phng thc ny trong cc lp con. V d, bn c th s dng RobotTemplate to mt con robot lp rp t. Bn c tha k t lp tru tng RobotTemplate trong mt lp mi, lp AutomotiveTobot.

Robot lp rp t ny phi vit li mt s hm ca RobotTemplate nh hm getParts s thng bo Getting a carburetor, hm assemble s thng bo Installing the carburetor, v hm test s thng bo Revving the engine. Bn thy , bn c th ty chnh cc bc trong mt thut ton c cung cp bi mt b khun template:

Bn cng c th ty chnh m ngun da trn template bng cch thm vo mt s hm, v d nh hm khi to s nhn tn ca con robot, v hm getName s tr v tn ny.

Tuyt vi. Bn k tha phng thc go t template, v ty chnh n cho robot lp rp t. Bn cng c th ty chnh hm go k tha t template, trong trng hp to robot nng bnh. Bn to lp mi CookieRobot, k tha t lp RobotTemplate. Bn c th vit lp CookieRobot bng cch lm cho hm getParts thng bo Getting flour and sugar, hmassemble thng bo Baking a cookie, v hm test thng bo Crunching a cookie

Ti gi, bn s dng hm go t b khun template to hai lp mi, AutomotiveRobot v CookieRobot, v bn vit li mt s bc trong thut ton ty thuc vo hai loi robot khc nhau. Bn khng phi vit li hai lp ny t u. Kim tra vic to Robot Bn hy to hai i tng ca hai lp AutomotiveRobot v CookieRobot, v gi hm go nh sau:

Khi bn chy th chng trnh, bn c th thy rng bn tht s c th ty chnh mt s bc trong thut ton ca hai loi robot khc nhau.

Thm vo mt hook (ND: Hook mc cu mt k thut chn bt thng ip chng trnh) Bn cng c th thm vo mt hook trong thut ton. Mt hook l phng php kim sot mt s kha cnh ca thut ton. V d, nu bn mun phn kim tra testing trong thut ton Robot c tr v kt qu ng khng, bn c th thm vo mt iu kin, mt hm hook c tn testOK nh sau:

Mc nh, bn c th b qua hm hook testOK nu khng lm g khc, thut ton Robot s gi y cc bc, bao gm c hm test. Tuy nhin bn c th cu mc vo thut ton bng cch vit li hm testOK trong mt lp con, lp CookieHookRobot, ni m hm testOKs tr v gi tr false, khng phi l true.

Bi v hm hook testOK tr v gi tr false, thut ton Robot s khng gi hm test t hmgo, bn c th xem m sau:

Kim tra hm hook: By gi to chng trnh, v gi hm cookieHookRobot.go:

Bn s thy thut ton Robot thc hin, tr bc test:

Bn thy , bn khng phi lm bt c th g vi hm hook, tuy nhin nu bn mun, bn c th tc ng ln vic thc hin ca thut ton. Nu bn xy dng mt thut ton s dng nhiu hm tru tng, tng hm ny s c vit li lp con, mc khc, hm hook s khng phi vit li, tr khi bn mun thay i vic thc thi mc nh ca thut ton. Bn s dng mu thit k Template Method khi bn c mt thut ton vi nhiu bc v bn mun cho php ty chnh chng trong lp con. Tht d dng. Bng cch vit li cc hm c khai bo trong lp tru tng, bn s thay i c theo cch bn mun. Mu thit k Template Method l mt tng tuyt vi khi bn c mt thut ton nhiu bc m chnh bn c th ty chnh n. C mt mu thit k khc cng lm vic ging vy, m ti s tho lun trong phn ti ca chng, n l mu Builder. Xy dng Robots vi mu Builder Tin tt! Gim c iu hnh ca GigundoCorp reo ln, trong khi phng nh bay vo phng hp. Khch hng ca chng ta ni rng h mun kim sot nhiu hn tnh nng ca Robot, v vy chng ta khng th s dng nhng b khun Template vit sn c na. By gi h mun h c th chn hnh ng m robot s thc hin ti lm r ch ny, bn ni u tin, chng ta thit lp mi th , robot khi ng, nhn nguyn liu, lp rp, kim tra v dng. Nhng by gi khch hng li mun kim

sot trnh t ny v chn la nhng chc nng h mun? C th l robot khi ng, ri kim tra, ri lp rp, ri dng? ng vy, Gim c ni y l thi im s dng mt mu thit k mi, bn ni Ti e rng phi lm nh vy, Gim c ni. Nhng quy nh ca khch hng Trong mu thit k Template Method, vn chnh l nhng thut ton nhiu bc bn c th ci t n theo cch bn mun, v nhng lp con s dng theo cch bn thit lp (Mc d bn c th vit li mt s bc, nhng quy trnh vn khng thay i ). Nhng by gi tnh hnh khc khch hng mun h thit lp trnh t hot ng v s lng cc bc ca thut ton. V vy m ngun m bn pht trin khng cn l trung tm chnh na, bn phi ng gi n trong mt lp mi, lp builder. Mu Template Method m ta c lm quen trong phn trc cho php bn ty chnh cc bc ca mt thut ton bng cch vit li cc bc trong thut ton nh hnh sau:

Mi chc nng u da trn khun mu Template trong mu thit k ny, v bn c th ty chnh template theo cch bn mun. Nhng by gi bn khng cn iu khin thut

ton na, thay vo chnh khch hng thc hin. H to robot vi nhng chc nng v trnh t h mun. V d thm hnh ng khi ng, khch hng c th gi hm addStart. thm hnh ng kim tra, h gi hm addTest v vn vn. Hnh minh ha nh sau:

c th p ng yu cu kim sot hnh ng robot ca khch hng GigundoCorp, bn phi chuyn m ngun c qua mt lp mi, lp CookieRobotBuilder, lp ny h tr cc hm addStart, addTest, addAssemble v hm addStop, nh hnh sau:

Nh , khch hng c th s dng CookieRobotBuilder to robot nng bnh. Khi khch hng to xong robot, m ngun s gi hm getRobot ca i tng CookieRobotBuilder nhn v mt robot mi, nh hnh v sau:

V by gi khch hng nm quyn kim sot cc thut ton, bn khng phi k tha mt template mu na.Thay v vy, to mt loi khc ca robot, bn cho php khch hng s dng nhng i tng builder khc nhau. tng chnh nh sau: by gi khch hng c th thit lp trnh t v s lng cc bc trong thut ton, v chn la ng i tng builder to ra robot m h mun. Sch ca GoF ni rng, mu thit k Builder Tch ri vic to dng mt i tng phc tp ra khi bn thn i tng v vy cho php cng mt qu trnh to dng c th to ra nhiu loi i tng khc nhau Khc bit ln nht gia mu Template Method v mu Builder l ai s to ra trnh t cc bc trong thut ton. Trong mu Template, bn l ngi to ra trnh t, v cc lp con s hin thc chng. Trong mu Builder, khch hng s thit lp trnh t v s lng cc bc trong thut ton, v hon i gia cc builder m phi cung cp to ra cc i tng khc nhau th hin thut ton . S dng mu thit k Builder khi bn mun khch hng kim sot c qu trnh to dng. V d, y l mu thit k m bn mun khi bn xy dng robot s dng cng mt qu trnh khi to nhng mun c th to ra nhng con robot khc nhau. Tt c nhng g khch hng cn l gi nhng builder khc nhau qu trnh xy dng vn nh c. y l mt v d khc, bn mun c mt on vn bn v xy dng mt ti liu, nhng bn li khng bit nh dng chnh xc ca n l RTF, Microsoft Word, hay vn bn n gin Mc d qu trnh to dng l ging nhau cho tng ti liu, bn c th s dng nhng builder khc nhau to da vo kiu ca loi ti liu.

Ni cch khc, khi khch hng mun kim sot qu trnh to dng, nhng bn vn mun c th to ra nhiu i tng khc nhau, mu Builder s gip bn thc hin iu . Ghi nh: Mu thit k ny tng t vi mu Factory, nhng mu Factory l trung tm trong qu trnh khi to mt bc, ch khng ci t nhiu bc nh y. Cho php khch hng to Robot Khi bn s dng mu Builder, khch hng s ph trch qu trnh to dng. Khch hng s dng i tng xy dng builder ca bn lm nhng g h mun. cho php khch hng to robot th hin mt lot cc hnh ng khi ng, lp rp, ngng Ti to ra mt giao din interface Robot Builder h tr cc hm nh sau: addStart, addGetParts, addAssemble, addTest v addStop: V d to mt robot vi cc hnh ng start, test, assemble v sau l stop, khch hng ch cn gi hm addStart, addTest, addAssemble v addStop ca i tng xy dng builder theo ng trnh t . Khi robot c to xong, khch hng ch cn gi hm getRobot ca Builder nhn v mt robot mi. V i tng robot mi ny c h tr hm go, hm ny s thc hin hng lot hnh ng m bn to dng trc . Bi v bn c nhiu loi i tng builder to nhiu loi robot khc nhau v d nh builder xy dng robot lm bnh, builder xy dng robot lp rp t Ti s to mt giao din interface RobotBuilder m tt c cc builder s hin thc giao din ny. y l nhng hm m cc robot builder phi hin thc, t hm addStart ti hm addStop, k c hm getRobot. Xem m sau:

Ti bt u to builder cho robot lm bnh, CookieRobotBuilder, cng ging nh tt c cc builder khc, builder ny cn phi hin thc giao din RobotBuilder

i tng robot trong m ngun trn, da trn lp CookieRobotBuildable, s c ni ti trong phn To mt vi robot tng thch. i tng robot c to s l mt i tng CookieRobotBuildalbe. V th chng ta cn mt bin lu tr i tng ny, m nh sau:

Khch hng c th ci t cc hnh ng cho robot nh start, stop, test, assemble, getParts theo trnh t bt k. lu li trnh t ny, ti s dng kiu ArrayList, vi i tng actions nh sau:

Cch d dng nht lu tr trnh t cc hnh ng ca robot trong mng danh sch actions l gn tng gi tr s nguyn cho tng hnh ng, nh hnh sau:

Ti lu i tng s nguyn trong mt mng danh sch ArrayList. V d, khi khch hng mun thm hnh ng start, chng trnh gi hm addStart, v robot builder s thm mt i tng s nguyn c gi tr 1 vo mng danh sch actions, v c th tip tc y l tt c cc hm thm chc nng cho robot trong builder:

Khi khch hng mun to mt i tng robot, h s gi hm getRobot ca builder ny. Khi hm ny c gi, bn bit rng qu trnh khi to hon tt, v vy bn c th ci t robot bng cch chuyn giao cho n tham s mng danh sch actions m n s thc thi. Trong v d ny, tng robot s c ci t bng cch chuyn tham s actions thng qua hm loadActions. M nh sau:

Vy l hon thnh phn i tng xy dng builder, n cho php khch hng t ci t robot theo trnh t h mun. Vy lm sao to lp Robot m ta s dng trn? To mt s robot thch hp: Tng loi th xy builder s to ra mt loi robot khc nhau, tng robot li c to t lp c s ca n, nh lp CookieRobotBuildable hay AutomotiveRobotBuildalble. Tt c cc robot phi c cng mt hm go thc hin cc chc nng. V vy bn c to mt

giao din interface vi tn RobotBuildable chc chn rng mi robot u phi hin thc giao din ny. M nh sau:

By gi tt c Robot u phi hin thc giao din ny. y l cch lp RobotBuildable hot ng. Bn c th np robot vi mng danh sch actions, thng qua hm loadActions, vi tham s actions c i tng builder to trc. Xem m sau:

Khi khch hng mun robot thc hin cc hnh ng c ci t sn, h gi hm go. Trong hm go, bn c th duyt qua mng actions v gi tng hm tng ng vi chc nng . V d bn duyt qua i tng s nguyn 1 trong actions, bn s gi hm start, duyt ti s 2 bn gi hm getParts v vn vn..Bn c th s dng mt i tng Iterator v pht biu switch trong hm go nh sau:

Ghi ch: Bn cng cn phi thm cc hm cho tng hnh ng nh : hm start ( hin th ch Starting), hm getParts ( hin th ch Getting flour and sugar ) vn vn.

Vy l hon tt lp CookieRobotBuilable. Gi bn c i tng xy dng Builder v robot. Gi l lc th nghim chng

Ty thuc vo loi robot m user chn la, i tng builder dnh cho robot lm bnh hay builder dnh cho robot lp rp t s c to ra. Xem m sau:

Sau khch hng to loi robot m h mun, v s dng cc hm addStart, addGetParts, addAssemble, addTest v addStop theo trnh t h mun

Sau khi robot c to, khch hng gi hm getRobot, i tng robot tr v c lu trong bin RobotBuildable. V bn c th gi hm go ca robot. M nh sau:

Khch hng c th to robot lm bnh hay robot lp rp t mt cch n gin thng qua vic chn ng builder. y l kt qu:

V y l kt qa vic to robot lp rp t, s dng cng mt quy trnh khi to:

Tuyt vi. Bn c th a builder cho khch hng, gip khch hng c th kim sot qu trnh to dng i tng. Download source code C sharp ti y.

You might also like