Вы находитесь на странице: 1из 135

DP4D

Mc lc
Series bi dch Design Patterns for Dummies Gii thiu ............................................................ 2 DP4Dummies Chng 1 Tng quan cc mu DP .................................................................... 4 DP4Dummies Chng 2: Strategy ............................................................................................ 10 DP4Dummies Chng 3: Decorator, Factory............................................................................ 24 DP4Dummies Chng 4: Observer, Chain of Responsibility ................................................... 41 DP4Dummies Chng 5: Singleton, Flyweight ........................................................................ 45 DP4Dummies Chng 6: Adapter, Facade................................................................................ 66 DP4Dummies Chng 7: Template, Builder ............................................................................. 82 DP4Dummies Chng 8: Iterator, Composite ......................................................................... 108 DP4Dummies Chng 9: State, Proxy .................................................................................... 129

DP4D

Series bi dch Design Patterns for Dummies Gii thiu

Mnh yu my tnh, v lp trnh t nh.Thng thng khi b mt vn no, mnh ln mng tm kim. Hu ht l tm ra c li gii nh cc bn khp ni tng hi v tng tr li . Thit ngh mnh cng nn c mt cht ng gp g ngc li cho cng ng lp trnh vin, d t d nhiu. Qua qu trnh t hc v tm ti, c khi nghe ti mt ngn ng mi no l mnh tm sch c v thc hnh, nay cng tri qua mt s ngn ng v IDE sau: u tin l lp trnh file .bat(trong MS-Dos), ri Foxpro, Pascal,C,C++,Visual Basic 3.0, Java, Visual Basic 6, Visual C++6.0 MFC, Visual J++ 6.0, Visual Basic.Net, HMTL,Asp, Javascript, PHP, v gn y nht l C# v ASP.net. Mnh nhn thy tt c ngn ng ch l cng c, v mc ch ca chng l to ra sn phm. Cng c no cng c im mnh, im yu, nhng nu bn s dng khng ng cch th khng th to ra mt sn phm tt. Vy lm th no s dng cng c mt cch ng cch. chnh l t duy gii thut lp trnh. T duy v gii thut l cch chng ta tru tng bi ton thnh tng bc nh, tng bc, v lp rp chng thnh mt sn phm ng. V d xy dng mt cn nh, cc bn cn chun b gch, ct, xi mng, nc, g, ngi lp Khi c nguyn vt liu, cc bn bt tay thc hin tng bc nh xy dng mng nh, xy dng cc bc tng, lp ngi Trc y mi ngi lp trnh theo phng php th tc, chia mt vn ln thnh nhiu phn nh khc nhau v x l tng phn mt theo ng trnh t.y l mt phng php tt v tng c p dng trong mt thi gian di. Tuy nhin khi chng trnh ngy mt cng ln, vic duy tr v pht trin hng trm ngn th tc l mt cng vic kh khn, tn chi ph v d sai st . Khi phng php lp trnh hng i tng ra i. Phng php ny cng chia mt bi ton ln thnh cc phn nh, nhng cc phn nh ny c ng gi vo tng i tng, cc i tng ny gn gi vi thc t hn rt nhiu, nn vic pht trin phn mm ngy cng d tip cn vi mi ngi.

DP4D V d lp rp mt ci ti vi, chng ta c i tng mn hnh, i tng mainboard, i tng loa, i tng remote sau lp li vi nhau. Yahooo! Tht d dng ng khng cc bn. Trong topic ny mnh khng c nh gii thiu v lp trnh hng i tng, v sch v v ch ny c qu nhiu, t ting anh qua ting vit, v t nhiu cc bn vo din n ny u nm qua. Vy ch tht s ca topic ny l g? C ai trong cc bn tng t cu hi ti c kh nng xy 1 cn nh, cn nh 1 tng, 2 tng thm ch 3 tng. Nhng khng bit xy cn nh 100 tng th sao? i vi cn nh 3 tng, khi c sai st, hay thay i tng 2, bn c th sa, hoc thm ch p b v lm li, nhng i vi cn nh 100 tng, b sai st tng th 3, chng l bn p b c 97 tng cn li? V l nguyn nhn ra i ca mt th gi l Design Patterns Cc Mu Thit K. Cc bn chc tng nghe ai ni ti mu thit k, ng vy, ti ngh bn nghe ni n n trong lnh vc xy dng kin trc. V gi y, chng ta s ni ti n trong lnh vc xy dng phn mm. Vy mu thit k l g: Ni nm na n l nhng gii php gii quyt nhng vn thng gp trong pht trin phn mm theo hng i tng. N l nhng bn mu, ta da vo xy dng nn nhng i tng. Vy li ch ca n th no? l n gip ta c nhng i tng mm do, d thay i, d bo tr. V v sao mu thit k li dnh dng ti lp trnh hng i tng. Tht ra th n b sung cho lp trnh hng i tng, n m rng kh nng to ln cho lp trnh hng i tng. Gn y khi mnh c dp c ti Design Patterns, mnh tht s thy n cun ht, rt c ch cho dn lp trnh. Tuy nhin ti liu v design patterns cng khng nhiu(mnh bit khong hn chc cun), ngn ng ch yu l ting anh, ti liu ting vit th t, chc ch c 1 cun (do MKPUB pht hnh, mnh cha c c, v mnh tnh, khng Tp.HCM nn khng mua c). Cch tip cn vn ca mi sch cng rt khc nhau, c khi rt chuyn ngnh, v tru tng, nhiu khi gy kh khn cho c ngi bn x ch khng dm ni ti ngi Vit mnh. Vi tham vng ng gp cho cng ng, mnh s dch thut mt cun sch mnh cho l tng i d tip cn. Sau khi c qua mt s cun sch nh sau: Design Patterns: Elements of Reusable Object-Oriented Software (Do b t tc gi Erich Gamma, Richard Helm, Ralph Johnson, John M.Vlissides). Cun kinh in v y nht C# 3.0 Design Patterns: ByJudith Bishop. ( Nh xut bn Oreilly) Head First Design Patterns ( Nh xut bn Oreilly) Design Patterns: by Christopher G. Lasater ( Nh xut bn Wordware) C# Design Patterns: A Tutorial by James W.Cooper ( Nh xut bn Addison-Wesley) Design Patterns for Dummies: by Steve Holzner,PhD. ( Nh xut bn Wiley) Mnh quyt nh chn cun Design Patterns for Dummies, tc gi Steve Holzner,PhD gii thiu n cc bn. C cc nguyn nhn sau: Cch dn dt d hiu, v d sinh ng, ngn ng thn thin Khng s dng UML m t biu , ( s gy kh khn cho cc bn cha nm vng UML) S mu tng i y . S trang sch khng nhiu lm. Ch khong 300trang. Tuy nhin cc v d trong sch l c vit t Java. C th s gy ra lng tng mt cht cho cc bn s dng C#. Nhng cc bn cng bit cha ca C# chnh l cha ca Borland C, Borland C++, Delphi, Visual J++, nn cc bn s thy Java v C# khng khc bit lm.

DP4D i vi cc bn cha th t mnh chuyn i m ngun t Java ->C# theo cc v d trong sch, mnh cng vit li cc v d theo C#. Tuy khng th hin 100% vic chuyn i, nhng vn ni bt c ca tc gi. V trnh anh ng ca mnh cha tt (ch t hc). Nn khng m bo dch st 100% tc gi. Mt khc vic dch thut, v chy chng trnh cng tn nhiu thi gian. Mi tun mnh s ng mt chng ca cun sch. Cun sch 12 chng. Tng thi gian trong 3 thng, cc bn s c lm quen vi hu ht cc mu thit k. C th thi gian trn so vi my cun sch ca SAM: Hc trong 24gi, s lm cc bn thy nn. Nhng lp trnh l mt ngh thut, m hc cch lm ch ngh thut th 3 thng chc chn cn cha . Mong cc bn hy kin nhn. Mi chng mnh s lp mt topic cc bn tin theo di v tranh lun. Thanks all Link download sch gc

DP4Dummies Chng 1 Tng quan cc mu DP

Chng 1: Xin chc mng, rc ri ca bn c gii quyt trit . Trong chng ny, chng ta s ni n: Gii thiu v Mu thit k Design Patterns l g? Hiu bit v tc dng ca Design Patterns M rng lp trnh hng i tng im s qua mt s mu Design Pattern L mt lp trnh vin, bn bit rng tht kh khn nh chi tit nhng vic bn ang thc hin. V khi bn khng nm bt c tng qut cng vic, bn c th d dng b l nhng vic quan

DP4D trng. Khi , m ngun bn ang vit c th vn cn lm vic tt p, nhng tr khi bn bao qut c bc tranh ln hn, lc m ngun bn vit mi thc s hon ho. Nhng vn nghim trng thc s thng xut hin sau khi bn chnh sa chng t nht mt ln. Nhng nh pht trin thng t mnh x l bng cch vit li m ngun v sa cc li . Tuy nhin trong mi trng cng vic, nhng nh lp trnh thng b phn ln thi gian bo tr, chnh sa nhng cng vic c hn l tp trung vo nhng sn phm mi. Bn thy rng tht v l khi c phi lm, ri sa, lm li, sa tip Gii php hp l nht l bn a ra c mt quy trnh tng quan cho vic thit k v bo tr, c nh vy, bn mi trnh c cc rc ri pht sinh khi mi trng ng dng thay i, hoc t nht bn cng gip cho vic bo tr, chnh sa d dng hn khi c pht sinh. tng ng sau cun sch ny l: Bn s s dng mt tp hp cc mu thit k Design Patterns lm n gin ha qu trnh trn. K hoch ny s gip bn c mt ci nhn tng qut. Mt mu thit k Design Pattern l mt gii php c kim nghim thnh cng khi i din mt vn lp trnh pht sinh c th. Khi bn quen thuc ht cc mu thit k trong sch ny, bn nhn vo mt chng trnh. Bam! Mt gii php ng n s xut hin trong tm tr bn, thay v bn phi p u vo tng trong v vng, gi bn c th ung dung ni y, ti s s dng mu Factory, mu Observer, hay mu Adapter l cha ni, mt s sch v thit k khuyn bn nn dnh phn ln thi gian phn tch v ln k hoch cho mt n. V p tht s y l mt ngi no i mt vi vn bn ang gp phi, h c gii php ng n cho n.V gi khi bn nhun nhuyn mu thit k, bn c th p dng cc thit k mt cch d dng. Lm sao tr thnh chuyn gia thit k trong lnh vc phn mm, iu m ai cng thm mun? Tht d dng, hy c cun sch ny, nghin ngm nhng mu thit k m ti dnh nhiu tm huyt vit. Bn khng cn phi nh mi th, bn ch cn bit l c nhng mu thit k . V khi bn i din vi mt vn thc t, su thm trong bn t nhin tht ln , c v ch ny c th dng mu Iterator Sau bn ch cn tm kim mu thit k trong cun sch ny, duyt qua cc v d bit phi lm g. V v vy, chng ny s l mt tour du lch nho nh, gip bn i qua mt s mu thit k tin dng v hu ch. Ch cn tm ra mu thit k thch hp im k diu ca Design Patterns l n gip cho cng vic ca bn d dng ti s dng, d m rng v bo tr. Khi bn thit k khng tt, phn mm ca bn khng c kh nng ti s dng v bo tr, khi gp vn pht sinh, bn s phi dnh nhiu thi gian, c khi l nhiu hn c lc bn vit ban u, ch l sa cha chng. V d: Bn ang mun to mt i tng Java, nhim v l c v phn tch mt ti liu XML. Bn cn phi to mt lp Parser (chuyn dng phn tch XML) sau bn to mt i tng ca lp ny. Bn thm ngh Ti gi mi vic vn n. Nhng thc t th c hng t lp Parser do ngi khc vit, v h lun mun s dng li nhng tnh nng c bit trong lp ca h. Nu bn c th s dng mu thit k Nh my Factory, gi y bn c th s dng bt c lp Parser no, k c ca nhng ngi khc, thay v c kh kh xi lp Parser do chnh bn vit ra. V v vy, chng trnh ca bn tr nn d m rng, ti s dng c v bo tr d dng. Ni cch khc, Mu thit k Design Patterns l nhng gii php gip cho ta c mt thit k tt khi i din nhng vn pht sinh trong vic lp trnh. Nhiu ngi gp vn ny, v gii quyt tt, vic ca bn l p dng chng. Bn khng cn phi ghi nh mi th, ch cn nhn ra u l mu thit k ph hp v t n vo ng ch. Tht tuyt ng khng cc bn.

DP4D i nt v cun sch tn Gang of Four B t tc gi. Quyn sch l tp hp 23 mu thit k c pht hnh bi Erich Gamma, Richard Helm, Ralph Johnson v John Vlissides, trong mt nghin cu ca h nm 1995.Vi ta gc l Design Patterns: Elements of Reusable Object-Oriented Software. Tm dch Mu thit k: nhng thnh phn ti s dng trong lp trnh hng i tng. H c gii lp trnh gi l B t Gang of Four, hay GoF. (ND: B t y l n d vi Tn nhm nhc ni ting Gang Of Four ca Anh hay B t quyn lc Mafia trong tc phm B gi hay l b t quyn lc chnh tr ca Trung quc, VN cng c b t quyn lc ca Vietnam Next Top Model). c rt nhiu s thay i k t khi xut hin, mt s trong 23 mu c s dng nhiu, s khc t khi c s dng. Ti s ni n y 23 mu trong cun sch ny, nhng ti s nhn mnh nhng mu thng c s dng hn. V k c mu mi khng c trong sch ca GoF, trong chng 11. C mt s tht l, bn khng ch phi nh k tng mu thit k, bn phi hiu su sc v n, c th p dng ng n trong thc tin. Ti cng s lu nhiu v lp trnh hng i tng xuyn sut quyn sch ny. Lp trnh hng i tng OOP l mt bc tin tuyt vi trong lnh vc lp trnh. Nhng c qu nhiu lp trnh vin s dng chng mt cch ty tin, thiu chiu su, v iu gy ra nhiu rc ri tim n. Phn ln vic tm hiu nhng mu thit k chnh l vic m rng khi nim lp trnh hng i tng. V d: ng gi nhng g thay i nhiu nht (encapsulating what chan ges most), cch chuyn i mt quan h k tha is-a sang quan h kt hp has-a ( xem chng 2 bit chi tit) v ti s ni chi tit v chng. Hy bt u bng mu Mediator Pattern (Ngi trung gian)

Hnh bn trn l mt v d v mu thit k, mu Mediator. Hnh cho chng ta thy chc nng ca mt mu Mediator. Theo hnh ta ang c mt website vi 4 trang. Website cho php khch hng duyt qua kho hng v t mua. Khch hng c th i t trang ny qua trang khc theo ng v trn hnh. y c mt vn pht sinh. Ti tng trang, bn phi vit m nhn bit khi no khch hng mun nhy qua trang khc v kch hot trang . Ti mt trang bn c qu nhiu ng i ti trang khc, v v vy s pht sinh nhiu on code trng lp trn nhiu trang khc nhau. Bn c th s dng mu Mediator ng gi tt c cc ng dn ti trang vo mt module duy nht, v t n vo trong mt i tng Mediator. T by gi, tng trang ch cn phi thng bo bt c s thay i no cho Mediator, v Mediator t bit dn trang cn thit cho khch hng, nh trong hnh bn di.

DP4D

Bn c th to ra mt Mediator vi chc nng dn trang. Ti y bn c th chnh sa v thay i d dng. chnh l chc nng ca Mediator (Ngi trung gian) Chuyn i vi mu thit k Adaptor (Ngi chuyn i) y l mt mu khc, mu chuyn i Adaptor.

Hy nhn vo hnh 1-3. u vo l mt i tng c. H thng tip nhn i tng c. Vi hnh 1-4. Khi h thng thay i, h thng khng tip nhn i tng c na, ch tip nhn i

DP4D tng mi. (ND: thc ra hnh nh 1-4 c cht cha chnh xc, phn I only take new objects, nn v nh li) Hnh 1- 5. y l ni xut hin mu Adaptor (Ngi chuyn i). Mc ch l chuyn i i tng c, thnh i tng mi, khi h thng s sn sng tip nhn i tng ny. ND: Cc bn hy tng tng. Cc bn c mt chic tivi vi u cm in 3 chn. cm in nh bn l loi 2 chn. Bn ra ngoi ca tim, mua 1 cc chuyn i, t 3 chn ra 2 chn. Lc bn c th s dng c in 2 chn ri. Cc chuyn i t 3 chn ra 2 chn, chnh l Adaptor Vn c gii quyt. Ai ni hc cc mu thit k l kh khn nh. ng trong mt i tng. Mu Proxy. (Ngi i din) y l mt mu khc. Mu Proxy. Mu ny ni rng, m bn vit ch tng tc vi i tng cc b nh hnh di

Thc t pht sinh, bn buc phi tng tc vi mt i tng xa, u trn th gii . Lm sao bn c th lm cho chng trnh ca bn tng tc vi mt i tng cc b trong khi thc t l n ang lm vic vi mt i tng xa. y mu Proxy (Ngi i din) xut hin. N l mt i tng nm bn trong chng trnh, lm trch nhim tng tc vi chng trnh, gip cho chng trnh tng rng n ang tng tc cc b, thay v tng tc vi mt i tng t xa. Bn trong, Proxy chu trch nhim kt ni vi i tng t xa. Nh hnh di

Bn s bit cch mu Proxy hot ng trong chng 9. i nt v mu Observer (Ngi quan st) Bn c th quen thuc vi mt vi mu trong sch ny, v d nh mu Observer ny chng hn. Mu Observer c th ng k vi h thng. Khi h thng c s thay i, h thng s thng bo cho Observer bit. Khi khng na cn, mu Observer s c g khi h thng.

DP4D

Hnh 8 cho thy mu Observer cho php 1 observer ng k vi h thng. Hnh 9, cho php observer th 2 ng k vi h thng. Hin ti h thng ang lin lc vi 2 observer. Khi h thng pht sinh mt s kin c th no , n s thng bo vi c 2 observer nh hnh s 10. Ti c gng trnh by tt c cc Mu thit k theo cch d hiu, d tip cn nht.Bn s khng phi nhn vo ng biu , cng vi cc lp tru tng y phc tp na. Cc chng trong sch nhm vo cc c gi l lp trnh vin, rt hu ch cho cc bn, cho d cc bn khng c ht tt c cc mu. Cc mu thit k trong sch ny tr thnh cc tiu chun v lp trnh trn th gii, v chng hu dng cho cc bn, d bn ang trnh no. Hy vng rng, trong tng lai, khi bn i din vi chng trnh ca mnh, bn t nhin nhn ra: Aha, y chnh l mu Faade.

DP4D

DP4Dummies Chng 2: Strategy


Chng 2: Ln k hoch hnh ng vi Mu Strategy (Mu chin lc) Trong chng ny, chng ta s i qua cc ni dung sau: M rng vic lp trnh hng i tng Lm quen vi cc khi nim tru tng, ng gi, a hnh v k tha Chuyn i qua li gia 2 khi nim is-a v has-a X l cng vic bng cc thun ton p dng mu Strategy vo thc t L mt chuyn gia thit k mu, bn i vo phng hp ca cng ty MegaGigaCo, gim c iu hnh v cc thnh vin ban qun tr ang n mng mt hp ng mi v thit k xe hi, mi ngi v tay v h reo n mng quanh phng. Hp ng ny s em n doanh s ln cho chng ta, gim iu hnh ni, cng vi ting vang bp bp ca ru champagne v s phn khch ca gim c. Vic ca chng ta l phi chc chn c c mt quy trnh thit k ng. ng nhn nt ln chic n chiu v hnh nh cc biu hin ln tng. ng ni tip: y l kin ca ti Sai, bn ni Gim c thong mt cht git mnh v ni tip, Nhng nu chng ta Khng, bn lc u ni. Xin th li, bn ni vi Gim c v ban iu hnh, R rng l chng ta ang mo him vi hp ng ny v i sai hng. Ti c th thy c t vn khi nhn vo cc biu ny Ban gim c th thm vi v tp trung v Gim c hi. Theo kin anh th sao Ti l chuyn gia thit k mu, ngi s gii quyt cc vn v lin quan v thit k, Bn ni. D nhin l cho nhng hp ng ln Gim c vit ra mt con s d on cho chi ph, mt con s kh ln, tuy nhin hnh nh vn cha ln i vi bn. Li sai, bn ni V gim c nhn bn nhu my. Mu thit k, bn gii thch. Cc gii php chung gii quyt cho cc vn lp trnh thng gp. Khng ch vy, n cn gip vic lp trnh tt hn, bo dng, v cng vic nng cp d dng hn . ng thy , vic thu mt chuyn gia nh ti c nhiu ngha, khi ti thy mt vn trong vic lp trnh m c th gii quyt theo mt mu thit k no , ti c th ni chi tit v n cho ng bit. Tt, cc lp trnh vin trong cng ty ni mt cch min cng, kin ca anh v mu thit k nghe cng hay y. Nhng chng ta s dng phng php lp trnh hng i tng, iu cha gii quyt c vn ? Khng bn ni. Thc t th ni dung chnh ca mu thit k l chng m rng khi nim lp trnh hng i tng. M RNG KHI NIM LP TRNH HNG I TNG? Chng ta nhc li cun sch ca Gang Of Four (GOF: B t tc gi), ta Mu thit k: S dng li cc thnh phn trong vic lp trnh hng i tng do nh xut bn Addison Wesley,

DP4D 1995 xut bn. S dng li l mt kha cnh quan trng khi lm vic vi cc mu thit k, v v th n cng gii quyt c cc vn ca lp trnh hng i tng(OOP). Ti s tho lun trc v OOP trong chng ny, v sau s cho bn thy mi tng quan gia OOP v mu Strategy hay cn gi l mu chin lc OOP ban u c pht trin nh l mt phng php lp trnh cho cc vn ln v phc tp. tng chnh l ng gi tt c chc nng vo trong i tng.Ni cch khc, y l phng php chia tr. Trc khi OOP ra i, bn lp trnh theo phng php th tc, bn c th chia cc tnh nng ca chng trnh thnh cc th tc khc nhau, nhng iu cng ngy cng phc tp khi kch c chng trnh ln thm. Khi chng ta cn phi c mt phng php mi qun l cc th tc mt cch d dng, v l nguyn nhn ra i ca mt phng php mi, phng php qun l trn i tng. V d, bn hy nhn vo nh bp v cch hot ng ca n, tht l c man cc s phc tp. T lnh phi c cc bm lm mt, b phn cm bin nhit, qut v vn vn. Bp l c th bao gm nhiu thit b nh b phn nhit , b nh thi gian, n..Theo cch nhn nhn ny, khi ta xem xt nh bp vi mi b phn cng mt lc, ta thy nh bp qu phc tp. Nhng nu bn bao bc tng thnh phn, thnh cc i tng, tnh hnh c th d dng x l hn rt nhiu. y l ci t lnh. y l ci bp l. l ci my ra chn v vn vn. Khng vn g ln c. Cc chi tit nh lm vic cng nhau c ta ng gi thnh mt i tng. cng chnh l cc i tng trong lp trnh hng i tng. Bn gp cc chc nng vo trong mt i tng v chng d dng c nhn bit, no l ci t lnh, bp l hay my ra chnV phng php lp trnh da trn cc i tng c gi l lp trnh hng i tng (Tt nhin bn chng nghe ai ni ti lp trnh hng t lnh, hay lp trnh hng bp l ) V d, trong chng trnh ca bn, bn c mt i tng tn l Mn hnh, n bao gm cc chc nng hin th d liu m bn mong mun. Mt i tng khc tn C s d liu s lm nhim v giao tip vi my ch c s d liu v vn vnC th c nhiu phc tp bn trong tng i tng, nhng khi bn ng gi mi th vo i tng, mi th tr nn d dng hn rt nhiu. Bn c th lm vic vi khi nim i tng Mn hnh v mt s chc nng n gin ca n nh ThitLpHSQut, CanhChnhMnHnh, ThtLpBmVideo v hng t chc nng khc. N lm cho lp trnh tr nn d dng hn, v l l do ti sao lp trnh hng i tng tr thnh phng php mnh m v ph bin hn bao gi ht. BN KHI NIM CHNH CA OOP OOP bao gm bn khi nim chnh l tru tng, ng gi, a hnh v k tha.Ti s tho lun chng trong phn sau y: Tru tng l g? Khi bn lm vic vi mu thit k, bn s thy phn ln u lin quan n khi nim tru tng. Tru tng l cch thc bn ngh ra xem xt vic gii quyt mt vn no . Tru tng khng phi l mt k thut lp trnh. Thc cht, n ch c ngha l bn phi nhn thc c vn trc khi p dng k thut hng i tng. Tru tng l cch bn phn chia, cch gii quyt vn thnh nhng phn on nh hn. y l cch thc bn gii quyt vn bng cch chia chng ra thnh tng phn nh c th qun l c. Ni cch khc, tru tng ha mt bi ton, n gin ch l cch gii quyt bi ton theo kiu hng i tng. Cc d liu cn thit cho tng i tng s tr thnh thuc tnh ca i tng , thuc tnh c th l ring t cho i tng hoc cng cng cho i tng khc s dng. Cc hnh vi m i tng th hin trong th gii thc cng tr thnh mt hnh ng ca chng v c vit thnh m ca chng trnh.

DP4D Khi bn chc chn tm ra hng gii quyt mt bi ton ng n, bn mi c th p dng cc mu thit k. Thng thng, khi lm vic vi mu thit k bn s tn nhiu thi gian hn cho vic tru tng ha cc khi nim, hn l lm vic vi tng i tng c th. ng gi l g? Khi bn a tt c chc nng v d liu vo trong mt i tng, bn ng gi chng. y l sc mnh thc s ca vic lp trnh hng i tng. Bn g b s phc tp ca i tng khi ng gi tt c d liu vo trong i tng .ng gi l cch bn a hng t ng dy in, ng, cm bin nhit, n vo trong mt i tng l t lnh. Khi bn ng gi chc nng vo trong mt i tng, bn quyt nh cch thc m i tng giao tip vi th gii bn ngoi. Mt ci t lnh c th mt qun l hng t th phc tp bn trong, tuy nhin ngi s dng ch quan tm l n c th lm lnh thc n hay khng? Cng cch thc , bn cng ch nh u l chc nng, thuc tnh bn trong ca t lnh, u l chc nng thuc tnh n giao tip vi th gii bn ngoi. C mt tng ng sau vic ng gi Bn che giu nhng th phc tp bn trong i tng v to ra mt giao din n gin i tng giao tip vi phn m cn li ca bn. Mu tht k cng l mt trng hp c bit ca s ng gi. Bn phi ng gi nhng g bn cho l d thay i nht Mt s mu thit k xoay quanh tng l trch ra nhng phn m d thay i nht hoc phn cn phi bo tr nhiu v ng gi chng vo mt i tng ring dng dng x l hn. Xuyn sut cun sch ny, bn s nhn thy nhiu v s ng gi v cch thc bt ng m mu thit k gii quyt cc vn thng gp. a hnh l g? Mt nn tng khc ca lp trnh hng i tng l tnh a hnh. l kh nng khi chng ta lp trnh mt chc nng, chc nng c th lm vic vi nhiu loi i tng khc nhau, ty thuc vo kiu thc s ca i tng trong thc t. V d, bn c th vit m x l tt c cc hnh dng khc nhau nh hnh trn, hnh ch nht, tam gic.. vn vn. Mc d chng c hnh dng khc nhau, chng c chung mt s hnh ng, v d nh chng c chung chc nng l cVRa. S dng tnh a hnh, bn c th vit code thc hin nhiu hnh ng trn loi hnh dng m bn nh lm vic v sau quyt nh hnh dng thc t no s c s dng khi chy chng trnh. a hnh (nhiu hnh th) c ngha l m bn vit ra c th s dng c nhiu kiu ca i tng m bn khng phi vit li m. Sau y l v d. Bn to ra mt lp (class) Shape vi phng thc chung l draw

Sau bn c th m rng mt lp mi, lp Rectangle, t lp Shape, v cho php n v mt hnh ch nht nh sau:

DP4D Bn mun v mt hnh? Khng vn g. Bn vit mt t m to mt i tng tn shape v gi phng thc draw:

Kt qu khi chy chng trnh: Mun v hnh ch nht s dng cng m trn? Khng vn g. y l s k diu ca tnh a hnh, hy to li bin shape vi kiu rectangle v chy li on code trn:

Kt qu l: Trong trng hp th nht, bn np mt i tng shape vo bin shape v gi phng thc draw. Trong trng hp th hai, bn ly mt i tng rectangle v np n vo cng bin shape ( mc d l bn khai bo n nh l 1 i tng shape) v sau gi phng thc draw. Vy l bn cng s dng mt bin shape, lu gi mt i tng shape, mt i tng rectangle, chng trnh vn hot ng v rectangle c tha k t shape. y l cch bn quyt nh kiu i tng no c np vo bin shape khi chy chng trnh v khi ton b m ca bn vn khng h thay i. K tha l g? c im cui cng v ni bt ca lp trnh hng i tng l tnh k tha. L qui trnh m mt lp c th tha hng ton b phng thc v thuc tnh ca mt lp khc. Bn c th nhn thy s k tha trong v d trc, bt u t lp Shape:

Sau lp Rectangle k tha t lp Shape nh sau:

DP4D

a hnh thng xut hin khi bn lm vic vi mu thit k bi v mu thit k c xu hng ng h kt hp hn l k tha (Bn s dng kt hp khi i tng ca bn cha i tng khc thay v tha hng t chng). K tha chnh l mi quan h Is-a (l mt). Ta c th ni Rectangle is-a Shape. Mu thit k- lp trnh hng i tng thng s dng vic kt hp hn l k tha. Khi bn s dng kt hp, m ca bn cha ng mt i tng khc, hn l tha hng t chng. Phng php ny t ra mm do, uyn chuyn thch ng vi nhiu loi i tng trong cng mt cch, cng mt on m. Mu thit k thng da trn tnh a hnh. Kt hp hay a hnh: Th nghim u tin khi thit k mt chic xe hi mi. Vy ai ni vi bn rng Kt hp th tt hn K tha. C l v d sau lm sng t vn . Cc lp trnh vin ti MegaGigaCo (phn u chng) u bit v s k tha v h bt u vic tht k xe hi mi bt chp li cnh bo ca bn cho n khi bn c c hi ni chuyn vi h. H bit h ang phi thit k mt lot xe, v vy h bt u to ra mt lp c s tn Vehicle vi mt phng thc tn l go , phng thc ny xut hin ln dng ch Now Im driving.

Sau h tao tip mt lp mi, nh l lp StreetRacer, s dng Vehicle lm lp c s nh sau:

Chng trnh ti y vn tt p. Bn c th cho chy chng trnh vi lpStreetRacer nh sau:

Kt qu nhn c

DP4D Bn cng c th chy cng lc street racer v formula one racer vi cng mt cch nh sau:

V kt qu l Khng ti. Gim c v ban iu hnh ni. Vy cn g phi s dng mu thit k H hi m mt nhn chm chm vo bn. Nhng sau h nhn c mt hp ng sn xut my bay trc thng Helicopter. My bay trc thng ? H l lun, th cng l mt phng tin vn chuyn. V vy h to mt lp Helicopter , c m rng ra t lp Vehicle :

Nhng li xut hin mt vn . Nu nh bn s dng helicopter trong cng mt iu kin nh xe hi:

Bn s nhn c 3 phng tin nh sau: mt xe street racer, mt xe Formula One, mt my bay helicopter nh sau: C g khng n, Gim c ni mt cch h nghi. Ti sao helicopter (my bay trc thng) m li ang chy? Hnh nh n ang bay th mi ng? Tuy nhin vn thc s ti t khi cng ty MegaGigaCo nhn c mt hp ng ch to my bay phn lc Jet, khi chng cng c k tha t lp Vehicle :

DP4D

Khi bn cho chy bn phng tin trn: mt xe street racer, mt xe formula one, mt my bay trc thng helicopter, mt my bay phn lc jet, bn nhn c kt qu sau: Chc chn l c sai st y V gim c ln ting. My bay phn lc Jet th khng chy trn ng, chng trn khng. Chng bay v rt nhanh. Khng vn g, cc lp trnh vin trong cng ty p. Chng ti s ghi (override) ln phng thc go ca lp Helicopter v lp Jet sa cha chng. H chnh sa li nh sau:

Gi lp my bay trc thng Helicopter bay c. OK. Gim c ni Tuy nhin vo tun sau, ban gim c hp v quyt nh phi chuyn t Now Im flying sang Now, Im flying 200mph v nhiu s thay i ti t k tip C mt vn ny sinh y, bn gii thch. Cc lp trnh vin th hin mt chc nng n gin l li mt chic xe hay mt chic phi c qua nhiu lp con. c th cha l mt vn ln nhng nu bn x l cc cng vic ny mt cch kh thng xuyn, th vic phi chnh sa mi lp con nh vy s tr thnh mt vn bo tr kh nghim trng. Bn ni tip: c th l s k tha khng phi l cu tr li cho tnh hung ny.Ni m bn cn phi thay i chc nng thng xuyn cc lp con. Bn cn phi chnh sa, bo tr phn ln cc on m cc lp con khi c s thay i. V khi c cng nhiu lp k tha lin quan, chng cng cn c phi bo tr khi c s thay i, v khi bn phi cp nht cc phng thc go mi mi. Vn bn phi gii quyt y l lm sao trnh c vic thay i cc lp con.Nu bn khng trnh c iu ny, bn s phi chnh sa rt nhiu file cp nht m ca bn. C l c mt cch tt hn x l vn ny hn l s dng s k tha. Hey mt lp trnh vin ni, Sao anh khng s dng giao din interface thay cho s k tha inheritance? Anh c th ci t mt giao din IFly v cho giao din mt phng thc go v cho lp Helicopter hin thc giao din nh sau:

DP4D

Khng tt bn ni. Anh vn cha gii quyt n tha vn . Mi lp v lp con vn phi hin thc cho ring n mt giao din, cng ging nh trng hp ca s k tha. Bi v giao din th khng ci t ni dung, bn vn phi vit code cho tng lp, iu ny c ngha l chng c s dng li c mt on code no c. Nm vng s thay i t is-a sang has-a Mi vic u thay i. Trong thi bui thng mi pht trin, mi th thay i nhanh chng. V vy vic lp k hoch cho s thay i l rt ng gi. Nu bn c mt vn nh cn phi c mt gii php nh, bn c th khng cn phi lp mt k hoch ln lao cho s thay i. Nhng nu bn lm vic trong mt d n nghim tc, vi mt khi lng cng vic ng k, th ng l lc bn nn nhn li v mt k hoch nghim tc khi c s thay i. Cc on m m bn vit hm nay, s phi chnh sa li ph hp vi nhng yu cu pht trin trong tng lai . Hu ht cc nh pht trin khng ch ti vn ny, v sau h lun lun hi tic. Vy cu hi t ra l d n phi ln ti u, bn quan tm n vn thay i. l s nh gi ca ring bn, mt phn ca ngh thut lp trnh.Bng cch nm vng phng php x l s thay i, bn s bit r hn khi no th nn thc hin n. C mt du hiu ng ch y: Phn chia cc on m d thay i trong chng trnh ring bit vi phn cn li. V lm cho chng cng c lp cng tt cho s bo tr nng cp. Bn cng nn c gng ti s dng nhng phn ny cng nhiu cng tt. iu ny c ngha l nu ng dng ca bn c mt phn b thay i, bn c th em n ring ra, sau thay i tng phn ring bit mt cch d dng trong khi vn khng b nh hng bi nhng tc dng ph ca n. V y l cch lp k hoch cho s thay i, v v sao k tha li khng th gii quyt tt cc s thay i ny. Vi s k tha, lp c s v cc lp con c mt mi quan h is-a. V d , lp Helicopter c quan h is-a vi lp Vehicle, iu ny c ngha Helicopter tha k mi th t Vehicle, v nu bn phi chnh sa cc phng thc ny, bn s gp phi vn bo tr n trong tng lai. Lp c s x l phng thc theo mt cch, v lp k tha li thay i n, v lp k tip li thay i n thm mt ln na. V cui cng bn c mt l mt lc cc bin th ca cng 1 phng thc qua cc lp con. Mc khc, nu bn c th trch nhng on code d thay i v ng gi chng vo i tng, bn c th s dng cc i tng ny khi cn. Nhim v mi l x l trn cc i tng ny. Bn khng vic x l ly lan qua cc lp con. Lm nh vy s cho php bn chnh sa m ca bn bng vic to ra s kt hp composites cc i tng. Vi composites kt hp ny, bn c th d dng chn ra v s dng i tng cn thit. Mt quan h has-a mi c to ra. Mt chic xe street racer s c mt has-a cch di chuyn, c ng gi vo i tng. Mt my bay trc thng s c mt cch ring di chuyn, v cng c ng gi vo i tng. Tng i tng s thc hin hnh ng ca ring n.

DP4D Mt i tng, mt nhim v thng l c ngha hn l vic k tha cc lp, v to ra hng t cc lp con. Ni cch khc, chng ta sp xp li da trn nhim v ca lp, ch khng phi trn s k tha. S dng k tha s t ng ci t mi thuc tnh mt cch nghim ngt, bao gm c quan h isa, l th gy ra cc rc ri khi bo tr cng nh khi m rng.Nu bn t k hoch cho s thay i, bn nn ngh ti quan h has-a , ni m m ca bn bao gm nhiu i tng m c th d dng cp nht khi c s thay i xy ra. Gi : Khi c k hoch cho s thay i, hy thay th quan h is-a thnh quan h has-a v t cc on m d thay i vo cc i tng trong ng dng ny hn l k tha chng. K HOCH CHNH SA Lm th no m tng phn chia cc on m d thay i s hot ng trong v d Vehicle/StreetRacer/Helicopter nhc trc y. Theo kin ca gim c iu hnh, phn c thay i nhiu nht l phng thc go , do chng ta s tch n ra. Trong thut ng v thit k mu, mi cch hin thc mt phng thc c gi l 1 thut ton(algorithm) hay c th gi l 1 chin lc (strategy). V vy bn c th to mt tp hp cc gii thut s dng cho cc bin ca bn nhStreetRacer, FormulaOne, Helicopter, v Jet . Lm nh th phn chia cc on m d thay i vo trong thut ton. Tng thut ton s hon thnh 1 nhim v. Cch to thut ton chc chn mi thut ton u hin thc cng mt phng thc (phng thcgo trn). Bn cn phi to mt giao din interface cho n (ND: Interface l mt khi nim rt hay trong OOP, m khi c dp chng ta s tho lun v n) nh sau: Giao din GoAlgorithm c mt phng thc duy nht go. chc chn rng mi thun ton c th c s dng bi bt k lp Vehicle no, ta cn phi hin thc interface ny. Thut ton u tin GoByDrivingAlgorithm , s hin th vn bnNow Im driving. V y l m ca thut ton:

Ngoi ra, thut ton GoByFlying, s hin th vn bn Now Im flying. M nh sau:

V cui cng, thut ton GoByFlyingFast, s c s dng bi my bay phn lc, hin th dng vn bn Now Im flying fast

DP4D Tuyt vi. Bn va phn chia cc thut ton ca mnh ra khi phn m. Bn ang thc hin thao tc thc thi quan h has-a hn l quan h is-a. By gi bn c th a cc thut ton ny vo s dng. S DNG THUT TON Bn ang c mt s thut ton, bn c th to cc i tng v s dng quan h has-a thay cho is-a. Sau khi bn to mt i tng t mt thut ton, bn cn phi lu tr i tng u . V vy hy thm vo lp c s Vehicle, mt phng thc mi SetGoAlgorithm. Phng thc ny s lu tr thut ton m bn mun s dng. M nh sau:

By gi khi bn mun s dng mt thut ton c th no lp k tha, tt c vic cn lm l gi phng thc setGoAlgorithm vi mt i tng thut ton ng, theo cch nh sau: Phng thc go ca lp Vehicle c cht thay i. Trc y l:

Tuy nhin, by gi n phi gi phng thc c nh ngha cc lp thut ton. M mi nh sau:

DP4D By gi th tt c nhng g phi lm l chn ng thut ton m bn mun s dng cho phng tin no . V d vi street racer s l thut tonGoByDrivingAlgorithm

Xe Formula One cng s dng cng mt thut ton trn, m nh sau:

Nhng my bay trc thng helicopter s s dng thut ton GoByFlyingAlgorithm:

V my bay phn lc Jet s s dng thut ton GoByFlyingFastAlgorithm

OK. n lc chy th chng trnh. Bin dch v chy th chng trnh nh sau:

Kt qu:

DP4D

Kt qu ng nh mong i. Tuy nhin by gi bn s dng mi quan h has-a thay v quan h k tha is-a. T lc ny bn c th s dng cc thut ton xuyn sut chng trnh, bt c u, v n khng cn nm trong cc lpStreetRacer hay Helicopter na. K thut ny thay th cho cch to cc lp con v s dng k tha. Nu bn s dng mt quan h k tha is-a, bn s bt u s rc ri cho vic kim sot c cc phng thc trong lp c s v cc lp con trong v d l bn phi np ln phng thc go cho lp Helicopter v Jet. Nu bn s dng m hnh has-a, bn c th to ra mt dng h cc thut ton mt cch r rng, v sau bn chn mt thut ton thch hp s dng. Theo cch ny, bn c th khc phc c vn m s k tha gy ra cho hu ht cc lp trnh vin: nu bn phi gii quyt mt chc nng c th no qua nhiu th h ca mt lp, v chc nng ny lin tc thay i, bn s phi chnh sa rt nhiu m ca mnh . Mt khc, khi bn tp trung chc nng vo mt thut ton duy nht, vic thay i n s d dng hn rt nhiu. Quay li v d trn, khi ban gim c mun thay i t Now Im flying sangNow Im flying at 20 mph. n gin, bn ch cn chnh sa thut tonGoByFlying:

V by gi tt c m ca bn t ng c cp nht, bn khng cn thit phi i tm v chnh sa tng lp con nh trc na. Theo cch ny, bn tp trung s x l mt chc nng vo mt i tng thut ton duy nht, bn s d dng qun l i tng ny trong trng hp yu cu chc nng b thay i. Chn la thut ton khi thc thi chng trnh i mt cht, Gim c MegaGigaCo ni. C vic xy ra, my bay phn lc khng ch bay nhanh, u tin n chy trn ng bng mt lc, v khi p xung mt t, n li tip tc chy trn ng bng na. V vy chng ta phi chnh sa chc nng cho n li : u tin l chy trn ng bng, ri bay, ri chy tip? l v mt l thuyt, cc lp trnh vin rn r Nhng iu lm chng ta phi vit thm nhiu on m na Khng sao c Bn ni. l mt trong nhng im k diu ca vic s dng mt i tng thut ton bn ngoi. Bn c th thay i n khi bn thc thi chng trnh Khi bn vit m cho mt chc nng trong mt lp, bn khng th thay i n khi thc thi chng trnh. Tuy nhin khi bn s dng mt i tng thut ton bn ngoi vi mi quan h has-a, bn d dng thay i chc nng lc chng trnh hot ng. Ni cch khc mt quan h has-a cho php bn d dng thay i hn mt quan h is-a c bit khi chng trnh ang hot ng. V y l v d cho vic s dng linh hot cc thut ton, cng nh vic thay i n khi chng trnh ang chy. Bn c th to mt my ban phn lc, c th chy trn ng bng vi thut ton GoByDrivingAlgorithm, nh m sau:

DP4D

my bay phn lc chy c trn ng bng, bn gi phng thc go:

Bn c th ci t thut ton mi setGoAlgorithm cho my bay phn lc, thay i phng thc go mt cch linh ng, v sau gi li phng thc go thy s khc bit.

V y l kt qu: my bay phn lc, chy trn ng bng, ri bay, ri chy trn ng, khng vn g c. Bn thy , vic chuyn i mt thut ton lc thc thi chng trnh rt d dng. Ni cch khc, nu bn vic x l thut ton vo ni ti mt lp, bn s khng th thay i n lc chy chng trnh. Nhng khi bn ci t mt chin lc Strategy, bn s d dng thay i n khi chy chng trnh. Tt c nhng iu trn mang chng ta n mt mu thit k Strategy, hay c gi l mu chin lc.

DP4D MU STRATEGY Mu chin lc Mu chin lc l mu thit k chng ta hc u tin trong quyn sch ny, v thc t l chng ta cng nhau i xuyn sut qua chng ny hiu v n. ngha thc s ca mu chin lc l bn tch ri phn x l mt chc nng c th ra khi i tng ca bn. Sau to ra mt tp hp cc thut ton x l chc nng v la chn thut ton no m bn thy ng n nht khi thc thi chng trnh. Mu thit k ny thng c s dng thay th cho s k tha, khi bn mun chm dt vic theo di v chnh sa mt chc nng qua nhiu lp con. Chng ta c th nhn thy vn tng qut nh sau. u tin mi vic u n, bn c mt i tng, mt chc nng

Mt thi gian sau , do yu cu c bit, bn cn c thm mt lp mi, bn k tha lp c, v ghi ln phng thc c tha hng. Bn ang dn tri vic x l chc nng qua nhiu lp con nh hnh:

Mu Strategy, mu chin lc ni rng: bn cn phi tch nhng phn d thay i v ng gi chng vo cc i tng v bn c th s dng cc i tng ny khi cn. By gi bn c th chnh sa m ca mnh thng qua vic to s kt hp cc i tng. Khi chng trnh thc thi, bn ch cn s dng ng i tng m bn cn. Nh hnh sau:

DP4D

Cun sch GoF ni rng mu Strategy, mu chin lc nh sau: nh ngha mt tp hp cc thut ton, ng gi chng thnh tng loi mt, v gip chng c th hon i cho nhau. Mu chin lc gip cc thut ton c lp hn khi c s dng. Mu chin lc ch ra rng, i khi, n s c p dng tt cho mc ch hng chc nng. V n c bit quan trng khi bn mun thc hin cng vic nng cp, bo tr cho cc on m d thay i ca bn mt cch ring bit vi ton b m ca chng trnh, hoc khi bn mun thay i thut ton s dng khi chng trnh c thc thi. Gi : Bn nn s dng mu Strategy khi c nhng tnh hung sau: Bn c mt on m d thay i, v bn tch chng ra khi chng trnh chnh d dng bo tr Bn mun trnh s rc ri, khi phi hin thc mt chc nng no qua qu nhiu lp con. Bn mun thay i thut ton s dng khi chy chng trnh Chng ti khng cung cp m ngun cho bn. Thay vo , bn hy lm quen vi vic suy ngh, v khi tng ti l lc bn nm vng mu thit k ny. iu ny cng ging nh mt cng vic phi thc hin cho mu Chin lc. Vic hiu bit cch thc lm vic ca cc mu thit k khc nhau cng gip bn c c hi tho lun vi ng nghip khc. Hu ht cc lp trnh vin chuyn nghip u bit mt s mu thit k c bn. V khi mi ngi trong nhm ca bn ni ti mu chin lc, mi ngi gt u ra v hiu bit, th bn cng c th lm nh vy. Download source code ti y

DP4Dummies Chng 3: Decorator, Factory


CHNG 3: TO V M RNG MT I TNG VI MU DECORATOR V FACTORY Trong chng ny, chng ta s tho lun v mt s ni dung sau:

Gi vng nguyn tc vit m Open-Close hay Lun m cho vic m rng, nhng n g cho vic sa i Gii thiu v mu trang tr Decorator Cc v d v mu trang tr Decorator Xy dng cc i tng vi mu nh my Factory ng gi vic khi to i tng bng mu nh my Factory S dng cc phng thc khi to nh my Factory Method

DP4D Bn ang lm nhn vin t vn Thit K Mu ti cng ty GigantoComputer, vi mc lng kh cao v bn ang trong cn tin cng ty. Hm nay c mn g? bn hi tay u bp kh chu ang ng sau bp nng. Cho mt ci hamburger, bn ni v xoay xoay ci khay trong tay. Ngi u bp mang ci hamburger n bn tnh tin, khng qun hi li C thm tht rn khng? Chc chn ri, bn ni. Ngi u bp xa phiu n c trn my tnh tin v lm li phiu n. Hamburger v tht rn. Va ni anh ta va g vo my tnh tin. Cho thm mt t pho mt Bn ni. Ngi u bp nm mt nh nhn kh chu , xa ci phiu n, m m ci bn phm v ni Hamburger vi pho mt v tht nng. Ok. ri ch? Hmm, bn ni, nhn qut qua ci thc n Hay l thm mt cht tht xng khi? Ngi u bp nhn chm chm vo bn v dng nh nh vng ra mt vi cu kh chu g nhng vn nhp phiu n vo my. Hey, bn ni. Anh chc chn l c li nhiu hn t vic s dng mu thit k trang tr Decorator ch h? Vng, anh u bp tr li, t hi v nhng g bn ni Ti ni iu ny c ngn ln ri Bn cm ci Hamburger pho mt tht xng khi vi v hnh phc v ni Thm mt vi lt c chua na th tuyt! Chng ny ni v hai mu thit k quan trng, n s lp y nhng thiu st trong vic lp trnh hng i tng c bn, c bit l kh nng k tha. y l hai mu trang tr Decorator v mu nh my Factory. Mu trang tr Decorator l la chn hon ho cho tnh hung ti va nu trn bi v ta ang ni v kh nng m rng chc nng cho mt lp c sn. Sau khi vit mt lp, bn c th thm phn trang tr Decorator (cc lp m rng) m rng lp ny. Khi bn khng phi sa i ln lp gc. Kt qu l ci Hamburger ca bn tr thnh Hamburger pho mt, ri Hamburger pho mt tht xng khi, mi th tht d dng. Nguyn l Open-Close Lun Open cho vic m rng v Closed cho vic sa i Mt trong nhng kha cnh quan trng nht trong qu trnh pht trin mt ng dng l cc nh pht trin v lp trnh vin phi i u vi s thay i, v l l do v sao cc mu thit k ny li c gii thiu trc tin. C th ni cc Mu Thit K s gip bn gii quyt c cc s thay i, v bn c th d dng chuyn i m ngun ca mnh cho cc trng hp mi v bt kh khng. Nh ti ni qua trong sut cun sch ny,lp trnh vin thng tiu tn thi gian cho vic m rng v thay i m ngun hn l pht trin m ngun gc. Mu chin lc Strategy c gii thiu trc y trong chng II, gip bn x l nhng s thay i bng cch cho php bn chn la mt thut ton thch hp t mt tp hp thut ton bn ngoi hn l phi vit li m ngun. Mu trang tr Decorator cng tng t vy, n cho php bn vit tip m ngun, trnh vic sa i ln m ngun gc, trong khi vn p ng c yu cu thay i. l im chnh yu ti mun nhn mnh. Ghi nh:Hy lm cho m ngun ca bn p ng c nguyn tc Lun ng cho s chnh sa, v lun m cho vic m rng cng nhiu cng tt. Ni cch khc, hy thit k m ngun sao cho khng cn phi thay i g nhiu nhng lun c th m rng khi cn.

DP4D y l mt v d cho vic vit m ngun lun ng cho s thay i. Cng ty m bn ang lm t vn, cng ty GigantoComputer, quyt nh lm mt ci my vi tnh mi. y l m ngun ca lp Computer:

Khi mt i tng computer c khi to. Phng thc description s tr v vn bn Youre getting a computer. . Ti gi mi vic vn tt p. Nhng mt s khch hng quyt nh rng h mun c mt ci a cng trong my tnh. Khng vn g c Cc lp vin trong cng ty p. Chng ta ch cn chnh sa m ngun li mt cht nh sau:

By gi khi mt i tng computer c to v bn gi phng thc description, bn s nhn c vn bn Youre getting a computer and a disk. Nhng mt vi khch hng vn cha hi lng. H mun thm mt ci mn hnh na. V th l cc lp trnh vin phi chnh sa tip nh sau:

By gi, khi bn to mt computer v gi phng thc description bn s thy Bn c th thy vn y: Cc lp trnh vin phi thay i m ngun mi khi khch hng thay i yu cu ca h. R rng, l vn chnh. V bn, vi cng v l t vn mu thit k, s chnh sa n. MU TRANG TR DECORATOR?

DP4D Ti phi nhc li mt ln na: cng nhiu cng tt, hy vit m ngun ca bn ng cho vic sa i, nhng m cho vic m rng. Trong chng II, bn bit cch lm vic vi mu chin lc Strategy. l, bn ng gi m ngun vo cc thut ton ring bit s dng d dng, hn l vic x l chng thng qua cc lp con. Mu trang tr Decorator c mt cch tip cn khc. Thay v s dng mt thut ton bn ngoi, mu thit k ny s dng mt phng php bao bc m ngun ca bn m rng chng. Ghi nh: nh ngha chnh thc ca mu trang tr Decorator trong sch ca GoF c vit: Gn kt thm mt s tnh nng cho i tng mt cch linh ng. Mu trang tr Decorator cung cp mt phng php linh hot hn l s dng lp con m rng chc nng cho i tng Mu thit k ny c gi l Ngi trang tr Decorator nhng dng nh l tn gi rm r. Mt ci tn tt hn cho mu ny c th l Ngi tng thm Augmentor hay Ngi m rng Extender bi v n cho php bn: tng thm hay m rng mt lp mt cch linh ng khi chng trnh c thc thi. Tuy nhin, nh bn thy trong chng ny, thut ng Ngi trang tr Decorator cn gip bn hiu r hn khi nim ng cho vic chnh sa, m cho vic m rng. Khi bn lm hnh ng bao bc m ngun m rng thm chc nng, bn khng cn thit chnh sa li m ngun c, bn ch yu tp trung vo vic trang tr n. V y l cch m n lm vic. Bn bt u vi mt ci my tnh computer n gin sau:

Khi bn gi phng thc description, bn nhn c kt qu Youre getting a computer. By gi bn mun thm t phn cng, mt cng mi chng hn.Trong trng hp ny, bn c th thm mt lp bao bc wrapper nh sau:

By gi khi bn gi phng thc description ca lp bao bc wrapper, n s gi phng thc description ca i tng computer nhn c kt qu Youre getting a computer v i tng cng disk s tr v kt qu and a disk. Kt qu bn nhn c Youre getting a computer and a disk Nu bn mun thm vi th na vo lp my tnh Computer, bn hy t n vo lp bao bc wrapper, v d nh thm vo ci mn hnh Monitor:

DP4D

By gi khi bn gi phng thc description, mi vic s xy ra nh sau: i tng computer, s thc hin phng thc description to ra kt quYoure getting a computer - i tng disk, s thc hin tip phng thc trn thm vo and a disk - i tng monitor, tip tc thc hin phng thc description thm voand a monitor - Kt qu l bn nhn c Youre getting a computer and a disk and a monitor V D V MU TRANG TR DECORATOR Bn bt u vit mt lp my tnh Computer n gin, vi mt phng thcdescription tr v kt qu computer nh sau:

OK. Bn hon thnh ci my tnh n gin. By gi lm sao to mt lp trang tr? Nhng lp ny hot ng nh l mt lp bao bc cho lp Computer, iu ny c ngha l phi c mt bin lu tr mt i tng computer. Mt cch n gin to lp bao bc wrapper l m rng lp Computer. To dng mt Lp trang tr Decorator

DP4D Bn c th bt u bng vic to mt lp tru tng c m rng t lp Computer( nh rng lp tru tng s khng th s dng trc tip c, bn phi k tha t lp ny, v to ra lp mi s dng). y l m ngun:

Lp mi ny, ComponentDecorator , c mt phng thc tru tng tndescription. Bi v lp ny l tru tng nn bn khng th to i tng t n.iu c ngha l bn chn chn mi lp bao bc wrapper k tha t lp ny phi nht qun, v khi mi lp k tha s c mt phng thc description ringkhc nhau. Thm vo mt a cng Disk y l lp bao bc Disk , s thm mt cng vo my tnh. Lp ny s m rng t lp tru tng ComponentDecorator

Bi v y l mt lp bao bc, n cn phi bit ang bao bc th g. V vy bn a cho n mt i tng computer ngay khi n khi to. Lp bao bc Disk s lu tr mt i tng tn computer

By gi bn cn hin thc phng thc Description. (Lu : khi bn k tha mt lp tru tng trong Java, bn cn hin thc tt c cc phng thc tru tng ca lp ). Phng thc mi ny s gi phng thc description ca lp computerv thm vo dng ch and a disk nh sau:

DP4D Vy l bn bao bc i tng computer, v khi bn gi phng thc descriptionca i tng disk ny, n s gi phng thc description ca lp computer, ng thi thm vo dng ch and a disk. Kt qu bn s c computer and a disk Thm vo mt CD Bn cng c th thm vo mt CD theo cng cch trn. y l m ngun

Thm vo mt mn hnh monitor Tt nhin bn cng c thm vo mt mn hnh theo cng mt cch nh sau:

OK. Bn c y cc lp. Gi l lc chy th nghim chng trnh. u tin bn to i tng computer nh sau:

Sau bn bao bc i tng computer thm vo mt a cng

DP4D

By gi hy thm vo mt monitor:

Sau , bn c thm vo khng ch mt CD, m l hai CD chng hn. Khng vn g ln lao c. Cui cng bn gi phng thc description ca lp bao bc xem kt qu:

OK. Khi chy chng trnh bn nhn c kt qu. Khng ti. Bn m rng mt i tng gc tht n gin bng cch bao bc n trong nhiu lp trang tr decorator khc nhau, trnh vic phi chnh sa trong m ngun gc. V l Mu Thit K Trang Tr Decorator. CI TIN TON T NEW VI MU THIT K NH MY FACTORY

DP4D Ti y, cng ty MegaGigaCo, bn c tr lng cao cho k nng thit k mu chuyn nghip ca mnh, bn ang to mt i tng kt ni c s d liu mi.Hy xem ton t new trong Java lm vic ny nh th no? Khng ti, bn ngh, sau khi hon thnh on m vic lp OracleConnection.By gi bn c th kt ni vi c s d liu Oracle. Nhng, Gim c iu hnh la ln ,lm th no kt vi my ch c s d liu Microsof SQL Server? c, bn ni Bnh tnh, ti suy ngh mt lt. Bn ra khi phng n tra v sau quay li tm gim c v ban qun tr. Mi ngi nng lng ch i v hi Mi vic xong cha? Bn tr li lm vic v to ra mt lp mi dng kt ni c s d liu, lp SQLServerConnection. Tt lm V gim c ni. Umh, vy lm sao kt ni vi MySQL? Chng ta mun n l kt ni mc nh. Woa, bn hi bi ri. Tuy nhin bn vn lm thm mt kt ni vi MySQL nh sau: Hin ti bn c ba loi kt ni c s d liu nh sau: Oracle, SQL Server v MySQL. V vy bn chnh sa m ngun cho ph hp vi cc bin nh Oracle, SQL Server hay bt c bin no khc nh sau:

Mi vic u n, bn ngh. Tuy nhin c ti 200 ch trong m ngun cn phi to kt ni c s d liu. V vy ti lc a on m ny vo mt phng thc ring, phng thc createConnection, qua truyn cho n loi kt ni m bn mun nh sau:

Phng thc c th tr v loi kt ni mong mun, ty thuc vo gi tr tham s truyn vo:

DP4D

Tuyt, bn ngh. Khng c g kh khn y. Tin xu V gim c ni ln trong khi chy o vo phng lm vic ca bn.Chng ta cn phi chnh sa li m ngun x l cc kt ni an ton cho tt c my ch c s d liu . Hi ng qun tr ca khu vc Western yu cu nh vy Bn a v gim c ra khi phng v ngi suy ngh. Tt c m ngun chc phi chnh sa li. Phng thc mi createConnection, phn chnh ca m ngun, s phi chnh sa li. Trong chng II ca quyn sch ny. Bn c bit du hiu phi s dng mu thit k: l tch ri phn m ngun d thay i nht ra khi phn m chnh ca bn. V c gng s dng li nhng phn ny cng nhiu cng tt. C l y l lc ngh v vic tch ri phn m ngun d thay i ra khi chng trnh chnh, phn to kt ni c s d liu connection, v ng gi n vo mt i tng. V i tng chnh l mu nh my Factory. i tng l mt nh my, c vit trong m ngun, nhm to ra cc i tng kt ni connection. V sao bn ngh ti mu thit k nh my Factory. y l nhng gi : Bn s dng ton t new to i tng OracleConnection Sau li s dng tip ton t new to i tng SQLServerConnection, v sau l MySQLConnection. Ni cch khc, bn s dng ton t new to nhiu i tng thuc cc lp khc nhau, iu ny lm m ngun ca bn tr nn ln hn v bn buc phi lp li iu ny nhiu ln trong ton b m ngun. Sau bn a on m vo trong mt phng thc Bi v yu cu vn cn c th thay i nhanh chng, nn cch tt nht l ng gi chng vo mt i tng nh my factory. Theo cch lm ny, bn tch phn m d thay i ring bit ra v gip phn m ngun cn li gi vng nguyn tc ng cho vic sa i Chng ta c th ni rng, ton t new vn tt trong mi trng hp, nhng khi m to dng i tng b lin tc thay i, ta nn ngh n vic ng gi chng bng mu thit k nh my factory. XY DNG MU NH MY FACTORY U TIN Nhiu lp trnh vin bit cch thc m i tng nh my factory lm vic. H ngh n gin rng, bn c mt i tng lm nhim v to ra i tng khc. l cch m i tng factory thng c to ra v s dng, tuy nhin n cn lm c nhiu hn th. Chng ta hy nhn vo cch thng thng khi to mt i tng nh my factory trc, sau xem xt nh ngha chnh xc t sch ca GOF, theo nh ngha m i tng nh my factory s c nhiu im khc, nhiu s uyn chuyn hn. To dng i tng nh my Factory V d u tin, FirstFactory, s lm vic theo cch hiu thng thng nht. Lp FirstFactory ng gi i tng xy dng connection, v bn truyn gi tr tham s theo ng loi mun to l

DP4D Oracle hay SQL Server hay loi g khc. y l cch bn to mt i tng s dng nh my factory : By gi, bn c th s dng i tng nh my factory mi to ny, to i tng kt ni connection, bng cch gi phng thc tn createConnection nh sau:

Vy bn to lp nh my FirstFactory nh th no? Hy xem m sau:

u tin bn truyn kiu kt ni vo phng thc khi to ca lp FirstFactory. Lp FirstFactory cha ng mt phng thc createConnection dng to ra mt i tng kt ni connection tht s. y l ni bn phi chnh sa m ngun nhiu nht ty theo loi kt ni mun to, m nh sau:

Kt qu, bn c mt lp nh my factory. To mt lp kt ni Connection tru tng

DP4D Hy nh rng mt trong nhng mc tiu ca chng ta khi vit m, l lm sao vic thay i phn chnh ca m ngun cng t cng tt. Vi mc tiu , hy nhn on m sau lm vic, khi ta s dng mt i tng connection c to bi i tng nh my factory:

Bn c th thy rng, i tng kt ni connection c to bi nh my factory, c s dng khp ni trong m ngun. s dng cng mt on m cho tt c cc loi kt ni khc nhau (Oracle,MySQL), on m cn phi c vit theo tnh a hnh, c ngha l tt c cc i tng connection, u c cng mt giao din interface, hay cng k tha t mt lp c s . Theo cch , bn c th s dng cng mt bin cho mi loi i tng kt ni. Trong v d, ti to mt lp tru tng connection, cc lp khc k tha n.Lp ny gm mt phng thc khi dng, v mt phng thc description ( tr v m t ca loi i tng ). M nh sau:

OK. Mi vic c v tt p. By gi bn to mt lp tru tng c s cho cc lp kt ni khc k tha. Bn cn phi k tha tt c cc i tng kt ni connection to ra t lp nh my factory. To lp k ni connection C ba lp kt ni connection m nh my Factory c th to ra, ph hp vi loi kt ni m V gim c mong mun: OracleConnection,SqlServerConnection,MySQLConnection. Nh chng ta va ni, cn phi k tha t lp tru tng va to. V mi loi trong chng u c phng thc decription tr v m t ca tng loi kt ni mt. y l m ngun ca lp OracleConnection:

DP4D

y l lp SqlServerConnection, cng k tha t lp tru tng Connection:

V lp MySqlConnection cng tng t:

Tuyt vi. Mi vic hon tt. Gi l lc th nghim chng. u tin ta to lp nh my, truyn tham s khi dng l Oracle:

DP4D

kim tra li i tng connection c to c phi l Oracle khng, ta gi phng thc description nh sau:

Kt qu bn nhn c Khng ti. l nhng g bn mong i. Ghi nh:Theo sch GoF, mu thit k phng thc nh my Factory Method c nh ngha nh ngha mt giao din to mt i tng, nhng cho php cc lp con quyt nh cch thc th hin n. Phng thc nh my Factory cho php mt lp tr hon vic hin thc ca n qua cc lp con im mu cht y l phn lp con quyt nh. Cho ti by gi, lp nh my Factory m bn va to, vn cha cho php cc lp con quyt nh cch th hin, tr vic cho k tha v ghi li phng thc ca lp Connection c s. Mu thit k phng thc nh my Factory Method ca GoF em n cho bn kh nng uyn chuyn hn phng php truyn thng rt nhiu. Cch lm ca GoF l: bn nh ngha cch phng thc nh my Factory lm vic, v cho php cc lp con hin thc implement mt nh my factory tht s. Chng ta ni rng, Hi ng qun tr khu vc Western bt ng gi in v yu cu h khng thch lp nh my FirstFactory, h mun c th to ra cc kt ni bo mt n my ch c s d liu, khng ch l mt kt ni thng thng. iu ny c ngha l h phi vit li lp nh my FirstFactory mi khi bn thay i n, h c th to ra mt kt ni bo mt.

DP4D y l vn ca cc lp trnh vin. Mi khi bn cp nht li lp FirstFactory, cc lp trnh vin khc phi vit li m ca h thch hp vi yu cu ca h. H ang gi v yu cu rng h mun kim sot c qu trnh nhiu hn. Tt thi, bn ni. chnh l vn mu thit k Factory p dng, giao quyn kim sot cho cc lp con. thy cch mu ny hot ng, bn thay i cch to i tng kt ni connection, s dng k thut ca GoF, bn s lm cho khu vc Western ca cng ty MegaGigaCo hi lng. Gi : Bn vn cn bn khon v cch s dng ca mu nh my Factory ca GoF?Mu Factory c s dng khi bn mun chuyn giao ton b quyn iu khin cc lp con cho cc lp trnh vin khc. TO MT NH MY FACTORY THEO CCH CA GoF Lm cch no cho php cc lp con ton quyn hin thc cch lp con th hin khi to mt i tng nh my factory. Cch m bn phi lm l nh ngha lp nh my factory nh l mt lp tru tng abstract hay giao din interface, v cho cc lp con hin thc implement n. Ni cch khc, bn to ra mt khung sn cho lp nh my Factory ti tr s ca MegaGigaCo, v vic hin thc lp ny s do cc lp con m nhim. To lp nh my tru tng factory Vic to lp tru tng factory rt d dng. Lp ny c gi l ConnectionFactory

Bn cnh mt phng thc khi dng rng, phng thc quan trng nht y l phng thc nh my createConnection. Ta phi lm cho phng thc mang tnh tru tng, cc lp con hin thc n. Phng thc ny nhn mt i s, l loi kt ni cn to:

V l tt c nhng g bn cn. S c t cho i tng nh my factory. By gi khu va Western s hi lng v h c th hin thc mt i tng nh my c th thch hp vi h t lp tru tng trn. To mt lp nh my factory c th Bn bay ti khu vc Western ca cng ty MegaGigaCo, gip h x l vn to i tng. Bn gii thch Ti hiu rng cc anh mun c quyn iu khin nhiu hn i vi cc i tng kt ni Vng cc lp trnh vin ca Western ni. Chng ti mun c th lm vic vi cc kt ni bo mt. Chng ti to mt vi lp mi, lp SecureOracleConnection, SecureSqlServerConnection v SecureMySqlConnection to ra cc kt ni bo mt. OK bn ni. tt c nhng g cc bn phi lm l m rng lp tru tng mi ca ti, tn l ConnectionFactory khi cc bn mun to i tng nh my factory cho cc bn. Hy chc chn

DP4D l cc bn s hin thc phng thc createConnection. Sau bn c th ty vit m cho phng thc createConnection to i tng theo ng cch bo mt m bn mun Cc lp trnh vin ca Western ni. Wa, tht d dng. Chng ti s to lp factory mi vi tn SecureFactory, v n s k tha t ConnectionFactory nh sau:

Tip theo, cc lp vin ca khu vc Western ni Chng ch cn hin thc lp createConnection m lp tru tng ConnectionFactory yu cu:

Cui cng, cc lp trnh vin ni chng ta ch cn to cc i tng t cc lp va to, lp SecureOracleConnection, SecureSqlServerConnection v SecureMySqlConnection, ty thuc vo kiu d liu c truyn vo hm createConnection:

Tht n gin H ni. S khc bit gia cch to mu nh my factory thng thng v cch ca GoF l cch ca GoF ch c t lp nh my factory v cho cc lp con x l ni dung chi tit. To cc lp kt ni bo mt hiu r cch thc GoF to mu factory, bn cn to cc lp c th cho i tng nh my connect mi, lp SecureOracleConnection, SecureSqlServerConnection v lp SecureMySqlConnection. Tht d dng to chng ,bt u t lp SecureOracleConnection, vi hm description tr v vn bn Oracle Secure:

DP4D

Tip theo l lp SecureSqlServerConnection, vi hm description tr v vn bn SQL Server Secure

V lp SecureMySqlConnection, vi hm description tr v vn bn MySql Secure:

Vy l hon tt phn m ngun. Gi l lc cho chng trnh chy. Thc thi chng trnh kim tra m ngun, hy to i tng SecureFactory v s dng n to i tng SecureOracleConnection. M nh sau:

DP4D Tt c nhng g bn cn phi lm l s dng hm createConnection ca i tng nh my factory to cc kt ni an ton. M nh sau:

Khi chy chng trnh, ng nh mong i, bn nhn c vn bn sau, chng t rng bn ang s dng mt kt ni Oracle bo mt: y cng l kt qu m bn nhn c t v d FirstFactory m chng ta ni trong phn trc, ngoi tr mt iu l bn cho php khu va Western t mnh hin thc loi nh my factory m h mong mun. Bn c t mt lp nh my bng cch to ra mt lp tru tng hay mt giao din interface cc lp con s dng, v ngi khc s t mnh quyt nh lp thc hin nh th no. Khng cn vic s dng mt i tng nh my c th, nay tp hp cc lp con quyt nh vic th hin chng nh th no. Download source code C# ti y

DP4Dummies Chng 4: Observer, Chain of Responsibility


Chng 4: Chuyn g ang din ra mu Observer v mu Chain of Responsibility Trong chng ny, chng ta s ni v: S dng mu Observer (Mu quan st) To mt i tng quan st Observer v i tng b quan st Subject S dng lp Observer Java S dng giao din Observer Java S dng mu Chain of Responsibility

ng ch bc vo vn phng v ni: Ai ang chnh sa d liu trn my ch, sao ti khng c thng bo? Bng cch no? Bn hi li: ng mun chng ti thng bo khi c bt k s thay i no trn my ch ? Bn bit ng ch va mi tip cn h thng ny, nhng khng ng ng ch li hi nhng cu k l vy.

DP4D ng vy. ng ch nhn mnh. Ti mun c thng bo khi c bt k s thay i no trn d liu my ch. Ti mun bit vic g ang din ra quanh y! ng mun ni l gi ng mt bo co? ng Ok Bn ni Ti c mt tt hn. ng ngh sao khi ti s dng mu thit k Observer (Ngi quan st), v ng k ng vi my ch d liu nh l mt ngi quan st d liu Database Observer. L sao? ng ch hi. ng s c thng bo bt c khi no c s thay i d liu trn my ch. Bn ni Khng cn bo co g c. Tt c u c vit t ng trong m ngun l tt c nhng g ti mun, ng ch ni v i khi. Bn mm ci vi chnh mnh v t hi. Khng bit khun mt ng ch s th no khi hng ngy nhn c 200,000 thng bo v s thay i d liu my ch. Th nhng, vi mu Observer, vic vit m s khng c kh khn g. Chng ny ni v mt i tng cn quan st. Khi i tng c thay i, n s thng bo cho tt c cc Observer (i tng quan st) nhng thay i . Chng ta ni v hai mu, mu Observer v mu Chain of Responsibility. Mu Observer cho php nhiu i tng quan st Observer nhn c thng bo, khi i tng b quan st c thay i. Tng Observer phi ng k vi ch th, khi ch th thay i, n s thng bo ti tt c cc Observer. Cc Observer c thng bo cng lc. Mu Chain of Responsibility tng t vy, nhng cc Observer c thng bo theo th t trc sau. Ht Observer ny ti Observer khc, gip cho tng Observer x l thng bo ca theo cch ca ring mnh. Thng bo cho Observer vi mu Observer. ng ch mun c bo co mi khi d liu trn my ch c thay i. Bn cng mun ghi nhn li s thay i ny. Ngi thc hin vic thay i cng mun bit vic thay i c thnh cng hay khng? V vy, bn cn c mt tp hp nhiu Observer quan st nhng g ang din ra .iu ng vi tn gi ca mu l Ngi quan st. Cho php i tng b quan st (my ch), thng bo ti cc i tng quan st (ng ch, ngi s dng) nhng g ang din ra. Mu thit k Observer ni v vic gi thng bo cp nht ti cc i tng quan st . Bn c th thm hoc xa 1 i tng quan st Observer trong khi h thng thc thi. Khi c s thay i din ra, tt c cc Observer u nhn c thng bo. Theo sch ca GOF (Design Patterns: Elements of Reusable Object-Oriented Software, xut bn nm 1995) nh ngha mu Observer nh sau: Xy dng mi quan h mt nhiu gia cc i tng, v khi i tng ch thay i, tt c cc i tng ph thuc s c thng bo mt cch t ng y l cch thc mu Observer hot ng. Mt observer ng k vi ch th nh hnh di

DP4D

Ch th lu li thng tin ca Observer ny. Sau mt observer khc, Observer 2 cng ng k vi ch th nh hnh di:

Vo thi im ny, ch th (my ch d liu), ang lu tr thng tin ca 2 Observer . Khi c s thay i trn my ch (d liu b thay i), n s t ng gi thng bo cho 2 Observer nh hnh di:

i tng quan st Observer ( ng ch, ngi qun tr) c th g ng k ra khi ch th (my ch) bt c lc no n mun. Lc n s khng nhn c thng bo t ch th na. Theo nh hnh sau:

DP4D

By gi Observer 1 s khng nhn c bt k thng bo no t my ch na. Khi my ch c s thay i, n ch gi thng bo cho Observer 2 nh hnh sau:

Tuy nhin, Observer 1 c th ti ng k vi my ch bt c khi no cn thit.Khi n li c a vo danh sch nhn thng bo. Cch to mt giao din ch th (Subject Interface) (ND: Interface l mt khi nim tru tng trong lp trnh hng i tng, l mt khi nim tng qut hn, th s hn ca mt lp. N nh ngha hnh dng ca mt lp. Cn c coi nh mt hp ng. Thng thng n quy nh lp no hin thc interface ny phi c nhng thuc tnh no, phng thc no) Khi bn hin thc mt mu thit k, phng php tt nht thng l bt u t vic to mt interface. iu ny m bo cho nhng lp bn nh to lun ph hp vi mu thit k. c bit l trong trng hp bn phi to nhiu lp khc nhau, vic to mt interface gn nh bt buc. Hin thc(implement) mt interface gip cho m ca bn sng sa v d hiu hn. Khi vit m cho mu Observer, bn to mt interface hay abstract class cho i tng Observer. iu ny gip cho vic to nhiu Observer lun nht qun vi nhau. (ND: Abstract class, cn gi l lp tru tng, l mt khi nim trong lp trnh hng i tng, n nm gia interface v class. N chi tit hn Interface, nhng tng qut cao hn Class. Interface ch nh ngha hnh dng ca lp, Abstract class va nh ngha hnh dng mt lp, va cha ng c phn hin thc ca lp) Trong v d sau, ti s to mt interface cho ch th Subject (i tng cn quan st), interface ny lit k cc phng thc ca Subject cn c. Subject ny cn phi c t nht 3 hm. Hm registerObserver ng k Observer, hm removeObserver g ng k 1 Observer, v hm notifyObservers thng bo cho tt c cc Observer bit khi c s thay i trn Subject.

DP4D

Interface trn lit k cc hm m ch th (my ch d liu), cn phi c. Tip theo, ta s nh ngha 1 interface cho Observer. To mt giao din quan st Observer Interface Vic ny tng i d dng, interface cho Observer ch cn 1 hm, hm ny s thc hin khi Observer nhn c thng bo t my ch. Ti t tn cho n l hm cp nht update. Trong v d ny, bn chuyn nhng thay i ca my ch ( nh xa, sa, to ) v tn record thay i vo hm update ny.

(ND: ti gi nguyn ch record trong vn bn gc. Thng thng cc database bao gm nhiu bng, mi bng bao gm nhiu hng, nhiu ct. Mt record chnh l 1 hng trong bng. Khi lp trnh ta thng nh x 1 bng thnh 1 lp. 1 hng trong bng, chnh l 1 i tng. Khi ta thay i i tng ny, chnh l ang thay i 1 record. Ti lun phn vn khi dch mt t chuyn ngnh tin hc sang ting vit, v thc s chng ta cha xy dng mt t in chun cho tin hc, iu ny cn phi huy ng lc lng quc gia. Ti thy rng nguyn t ting anh th d hiu v chun mc. Bn ngh sao khi ti dch t implement thnh hin thc, instance thnh th hin, record thnh bn ghiC g khng n, nn c lc ti gi nguyn t ting anh, c lc ti chuyn ng, mong rng cc c gi thng cm b qua) Khi observer hin thc hm update ny, my ch c th chuyn ti observer tn record v nhng thay i trn record . Mi vic bt u tt p. Tip theo ti s to mt i tng Database(my ch d liu), lm i tng b quan st, n s lu tr thng tin v cc observer (i tng quan st), v thng bo cho observer bit khi c g thay i din ra. To mt i tng cn quan st ch th Subject Ch th cho php mt Observer ng k, v phi thng bo cho Observer bit khi c s kin xy ra. Theo nh giao din Subject Interface trn, c 3 hm m Subject cn phi hin thc l registerObserver, removeObserver, notifyObserver.

DP4Dummies Chng 5: Singleton, Flyweight


CHNG V: T MT CHO TI NHIU MU DUY NHT SINGLETON V MU FLYWEIGHT Trong chng ny, chng ta s i qua cc ni dung sau:

S dng mu duy nht Singleton V d v Singleton ng b ha loi b cc vn rc ri trong a lung.

DP4D

Mt cch tt hn x l a lung S dng mu hng rui flyweight L mt nh t vn c tr lng hu hnh ti MegaGigaco, bn phi x l cc s c v hiu nng h thng. H thng hnh nh ngy cng chm chp hn. Cc lp trnh vin ni: Hmm, bn ni, Ti lu cc bn rng chng ta ang c mt i tng d liu c kch thc kh ln, khong 20Mb Vng, h ni. Cng mt thi im, cc bn s dng bao nhiu i tng ny? Khong 219, cc lp trnh vin ni Tri, vy cc bn s dng 219 i tng 20Mb trong lc chng trnh hot ng? Bn ni. Chng l khng ai thy c vn y ? Khng, h ng thanh ni. Bn ni vi h Cc bn s dng qu nhiu ti nguyn h thng. Cc bn c hng trm i tng to ln m my tnh phi x l. Cc bn c tht s cn tt c chng? Vng h ni. Ti ngh l khng, bn ni. Ti s sa cha vn ny bng cch s dng mu duy nht Singleton. Chng ny ni v vic kim sot s lng i tng m bn phi to ra trong m ngun ca mnh. C hai mu thit k c bit gip ch cho bn: mu duy nht Singleton v mu hng rui flyweight. Vi mu duy nht Singleton, bn lun m bo rng ch c duy nht mt i tng cho mt lp c th trong sut ng dng. Vi mu hng rui flyweight, bn cng c duy nht mt i tng cho mt lp, nhng khi nhn vo m ca bn, ta c th thy ging nh ang c nhiu i tng vy. y l mt th thu t kho lo. To mt i tng duy nht vi mu duy nht Singleton. Ti bt u vi mu Singleton v x l rc ri m lp trnh vin MegaGigaCo gp phi. H mun chn chc rng ch to duy nht mt i tng cho mt lp c th mc cho ngi khc c c gng to bao nhiu i tng i na. Cc lp trnh vin ang to ra hng trm i tng Database trong m ngun, v rc ri l tng i tng ny c kch thc rt ln. u l gii php? Mu duy nht Singeton l cu tr li. Mu duy nht Singleton chc chn rng bn c th khi to ch duy nht mt i tng cho mt lp. Nu bn khng s dng mu thit k ny, ton t new nh thng s dng, s to ra lin tip nhiu i tng mi nh sau:

Ghi nh: chc chn rng bn ch c duy nht mt i tng, mc cho ngi khc c hin thc bao nhiu phin bn i na, hy s dng mu duy nht Singleton. Cun sch GoF ni rng, mu

DP4D Singleton m bo rng mt lp ch c duy nht mt th hin v cung cp mt bin ton cc truy cp n Bn s dng mu Singleton khi bn mun hn ch vic s dng ti nguyn (thay v vic to khng hn ch s lng i tng) hoc khi bn cn phi x l mt i tng nhy cm, m d liu ca n khng th chia s cho mi th hin, nh registry ca Windows chng hn. Gi : Ngoi i tng bn ghi registry, bn c th s dng mu Singleton khi bn mun hn ch s lng cc th hin c to bi v bn mun chia s d liu ca cc i tng ny. V d nh khi bn c mt i tng ca s window hay hp thoi dialog, cn phi hin th v thay i d liu, bn s khng mun to nhiu th hin ca i tng ny, v bn s b bi ri trong vic phi truy cp d liu ca th hin no. Vic to mt i tng duy nht cng rt quan trng khi bn s dng a lung v khi bn khng mun s ng d liu xy ra. V d bn ang lm vic vi mt i tng c s d liu, v cc th hin khc cng lm vic trn cng c s d liu , vic ng c th gy ra cc vn nghim trng. Ti s tho lun cch lm vic vi mu Singleton v a lung trong chng ny. Bt c khi no bn tht s cn duy nht mt th hin ca mt lp, hy ngh ti mu Singleton ( thay v dng ton t new ). To lp c s d liu Database da trn kiu Singleton Gi l lc bn bt tay vo vit m ngun. Bn s to mt lp tn Database m cc lp trnh vin trong cng ty s s dng. Lp ny c mt hm khi dng n gin, nh m sau:

Bn cn phi thm vo hai hm editRecord, cho php bn chnh sa mt bn ghi, v hm getName, tr v tn gi ca Database.

DP4D

Ti gi mi vic vn tt p. Bt c khi no bn to mt i tng bng ton t new, mt i tng mi s c to ra. Nu bn to 3 database, bn s c 3 i tng nh sau:

Lm sao bn c th trnh vic to mt i tng mi khi s dng ton t new?y l mt gii php lm cho hm khi dng t ton cc (public) tr thnh cc b (private)

iu ny ngn cn mi ngi s dng hm khi dng, ngoi tr chnh trong lp ny gi ti. Nhng i mt cht, c g khng n y? Ai trn tri t ny li cn c mt hm khi dng ring t vy? Lm sao bn c th to mt i tng khi bn khng th gi hm khi to n? Bn lm cho hm khi dng tr nn ring t v cch duy nht phn cn li ca th gii khi to i tng l thm vo mt hm to i tng, v gi n khi bn chn chn mun to mt i tng duy nht cho lp ny. Hy xem on m sau:

DP4D

OK. u tin bn ngn chn vic khi to bng ton t new. V by gi cch duy nht l to mt hm gi vic khi to i tng, thng thng hm ny c tn getInstance (hay createInstance hoc mt ci tn c th nh createDatabase cng c). Ch rng hm ny c gn phm vi cng cng v l mt phng thc tnh bn c th truy cp ti n thng qua tn lp ( v d nh Database.getInstance()) (ND: public v static l hai khi nim trong OOP. Public gip hm c th c s dng t bt k lp khc, static gip ta c th s dng hm trc tip t tn lp, khng cn thng qua mt i tng lp. )

Hm ny s tr v mt i tng Database, nhng hm ch hot ng khi c t nht mt i tng tn ti. V th u tin ta cn kim tra i tng ny, ti gi n l singleObject, xem n tn ti cha? Nu cha, ti s to n. V sau tr gi tr n v cho hm.

DP4D

Vn c gii quyt. By gi ch c duy nht mt i tng Database tn ti trong cng mt thi im. ( Vn a lung ta s gii quyt trong phn sau ca chng). Vic gi hm getInstance s cho ta mt i tng nh hnh sau:

Khi bn gi getInstance ln na, bn s nhn c cng mt i tng nh ln u. Khng quan tm n vic bn gi bao nhiu ln getInstance, bn lun nhn c cng mt i tng. chnh l cch bn phi lm vi mu singleton. Chy th v d vi mu Singleton Bt u bng vic to mt i tng Database vi tn l products, sau gi hm getName:

DP4D

Sau bn tip tc to mt i tng Database vi tn l employees, v gi li hm getName kim tra:

Tuy nhin i tng Database c to, v vy trong ln th hai, hm getInstance vn tr v i tng Database c, v kt qu l bn nhn c thng bo: Qu r rng. Bn nhn c duy nht mt i tng cho d thc hin vic to hai ln. Cch thc bn lm vic nh sau: ngn cn vic khi to bng ton t new, v to mt hm mi to i tng theo bn. chnh l cch mu Singleton hot ng. ng qun vn a lung Hy xem hm getInstance trong v d trn:

DP4D

C mt l hng tim tng y, tuy nh nhng l mt l hng r rng, l khi lm vic vi a lung. Hy nh rng, bn mun m bo rng ch c duy nht mt i tng Database tn ti. Nhng khi bn c nhiu lung chng trnh chy cng lc, bn s gp rc ri. C th l, hy ch on m kim tra s tn ti ca i tng Database:

Nu c hai lung cng thc hin hm kim tra ny mt lc, hai lung ny u tha iu kin ca hm if ( tc cha c i tng no c to), v iu ny c ngha l c hai lung u to ra mt i tng Database. Lm sao chnh sa ch ny? Mt cch d dng l s dng t kha synchronized ( ng b ) trong Java, xem on m sau:

DP4D

S dng t kha synchronized s kha vic truy cp vo hm getInstance, trong khi hm getInstance c chy. Bt c lung no mun gi hm getInstance, u phi i hm ny hot ng xong. S dng k thut ng b ha synchronized l cch d nht thc thi vic n lung trong gi hm, v k thut ny gii quyt c vn a lung. Chy th chng trnh vi gii php ng b ha: Bi v vic gi hm getInstance c ng b ha, bn c gi hm t nhiu lung khc nhau. Xem m sau:

DP4D

on m cng cho php chy mt tin trnh mi c gng to mi mt i tng DatabaseSynchronized:

Tin trnh mi c gng to mt i tng mi DatabaseSynchronized vi tn employees.

DP4D

Nhng nh bn c th nhn thy, khi chng trnh thc thi, ch duy nht mt i tng DatabaseSynchronized tn ti. l i tng products. K t khi bn s dng k thut ng b ha trn hm getInstance, bn khng cn lo lng v vn a lung na. Ch duy nht mt lung c gi hm getInstance. N ngn chn vic to i tng bng mt bc tng an ton, vic kim tra trn cho thy, nu i tng mun to tn ti, hm s khng to, ngc li, s to i tng cho lp. Thot nhn, iu ny tht tuyt vi, ng b ha hm getInstance v gii quyt c vn a lung, bo v m ngun chng li vic xung t khi c nhiu tin trnh cng to mt i tng. Tuy nhin, vn cn mt cu hi, vic ng b ha gii quyt vn , nhng c phi l cch tt nht. Vic ng b ha gy tn ti nguyn h thng, Java buc phi theo di tng tin trnh cho x l khi no th cho php tin trnh truy cp hm getInstance, khi no th khng cho php. ng b ha hm getInstance lm vic, nhng vi chi ph ng k. C cch no tt hn gii quyt vn ny? Ti u ha vic x l a lung Vn khi bn c gng x l t kha synchronized l on m kim tra vic to i tng s b ph hng bi cc tin trnh khc. Mt cch tt hn lm vic ny l m bo rng on m kim tra khng cn quan trng na. Mi vic th no?Cc lp trnh vin hi trong kinh ngc. Nu bn khng kim tra vic to i tng, lm sao bn c th chc chn l bn khng to thm mt i tng mi?

DP4D Bn gii thch Bng cch loi b ton b m to i tng ra khi hm getInstance . Ti s vit li m chc chn ch mt i tng c to ra. V i tng s c to ra trc khi bt c lung chng trnh no c th nm bt c n. Hmm, cc lp trnh vin ni Nghe c v n s hot ng tng nh sa: To i tng duy nht m bn mun ngay khi m ngun c np ln u tin vo Java Virtual Machine (my o Java, b my bin dch v thi hnh Java). Khng hm getInstance to i tng na. Ch cho php hm tr v i tng va to. M nh sau:

Tt, gi bn to i tng duy nht ri. Tt c nhng g cn lm l cho hm getInstance tr v i tng ny

DP4D

Nh cc bn c th thy, tht n gin, i tng singleton c to ra trc khi bt c lung chng trnh no c th nm bt c. Tuyt vi. Cch lm vic ca gii php x l tin tin trnh Chng trnh trn c hot ng khng? Nh vi gii php ng b ha, bn c th phin bn ny lm vic bng cch to i tng DatabaseThreaded bng cch gi hm getInstance.

V bn c th s dng mt tin trnh khc c gng to ra mt i tng DatabaseThreaded khc.

DP4D

V khi chng trnh hot ng. Bn thy rng bn ang nhn c cng mt i tng. y l gii php tt hn vic ng b ha hm getInstance. Khng th to nhiu hn mt i tng, nn s trnh c s xung t gia cc lung chng trnh.Bn g b m ngun ng b ha bng cch a chng ra hi hm getInstance. Ch : Nu bn s dng Java vi phin bn nh hn 1.2, c mt rc ri vi trnh thu dn rc. Nu khng c mt tham chiu vi i tng singleton, trnh thu gom rc s thu gom lun i tng ny. Li ny c sa li trn phin bn 1.2 C mt vn cn ch . Nu bn s dng b np a lp v s dng i tng singleton, bn s gp li. Bi v mi lp s dng mt khng gian tn khc nhau, bn c th i mt vi vic to nhiu i tng singleton. V th khi bn s dng nhiu lp, hy chc chn rng m ngun c kim tra i chiu gia cc lp, m bo rng ch c duy nht mt i tng singleton tn ti trong mt thi im. Mu hng rui flyweight gip cho mt i tng trng ging nhiu i tng. Mu singleton ni v vic to mt i tng duy nht. C mt mu thit k khc cng hn ch vic to i tng, nhng ln ny n s em n mt cch thc khc trong vic vit m. l mu hng rui flyweight. Mu thit k ny gi l hng rui flyweight nguyn do thay v phi lm vic vi nhiu i tng c lp, to ln, bn gim bt kch thc chng bng vic to mt tp hp cc i tng dng chung nh hn, gi l flyweight m bn c th ci t vo lc thc thi chng trnh chng trng

DP4D ging nh nhng i tng ln hn. Mi i tng to ln c th tiu tn nhiu ti nguyn h thng, bng cch tch nhng im ging nhau ca cc i tng ny, v da trn vic cu hnh thi gian thc m phng li cc i tng ln, bn lm gim bt gnh nng ln ti nguyn h thng. Bn c th em nhng phn ring bit ra khi m ngun ca nhng i tng to ln v to ra nhng i tng flyweight. Khi lm iu ny, bn chm dt vic s dng nhiu i tng c chung cc c im, v gim xung vic ch s dng mt i tng, c th ci t khi chng trnh thc thi, m phng li c tp hp cc i tng to ln ban u Ghi nh: Sch GoF nh ngha mu flyweight nh sau: S dng vic chia s gip cho vic x l cc i tng ln mt cch hiu qu H cng ni rng: Mt mu flyweight l mt i tng chia s m c th s dng trong ng thi nhiu ng cnh. Mu flyweight hot ng nh mt i tng c lp trong mi thi im. y l nhng g din ra. Bn bt u vi mt tp hp nhiu i tng to ln trong m ngun. Bn g b nhng phn dng chung, ng gi chng vo mt i tng chia s, mt flyweight, i tng ny hot ng nh mt khun mu. i tng khun mu ny c th c ci t vo lc thc thi chng trnh bng cch chuyn cc c im dng chung vo i tng flyweight n xut hin ging nh mt hay nhiu i tng ln ban u. Bn c th thy nh hnh v sau:

T nhng i tng to ln, bn to mt i tng nh hn gi l flyweight (trong v d ny l mt flyweight, ty nhin ty thuc vo ng dng m bn c th c nhiu flyweight), m bn c th ci t vo lc chng trnh hot ng nh hnh sau:

DP4D

Bt c khi no bn phi x l mt lng ln cc i tng, mu Flyweight s xut hin trong tm tr bn. Nu bn c th tch nhng ni dung ging nhau cn thit t nhng i tng ny, v to mt flyweight, hoc nhiu flyweight, m hot ng ging nhng khun mu, th chnh l cch mu flyweight hot ng V d rng, cng v mt chuyn gia thit k mu, bn c chn ging dy v mu thit k cho mt lp hc. Chng trnh m bn cn c theo di h s hc vin cho tng hc vin c th l nhng i tng tht s ln. Bn quyt nh n lc tit kim ti nguyn h thng. l cng vic ca mu Flyweight. To mt hc vin to m ngun cho mt i tng hc vin, bn quyt nh ci t n nh mt i tng Flyweight vi tn Student. i tng ny c cu hnh sao cho trng ging nhiu hc vin m bn mun. V vy bn thm vo cc hm thit lp thng tin v tr thng tin, chng hn tn hc vin, m s, v im. Bn cng c th mun so snh hc lc ca cc hc vin vi nhau, nn bn thm mt hm getStanding, c th tr v mi tng quan ca hc lc hc vin v im trung bnh . M nh sau:

DP4D

Lu rng hm getStanding s tr v s khc bit phn trm im s ca sinh vin so vi im trung bnh. Chy th mu Flyweight s dng mu flyweight, bn phi lu tr d liu m bn mun cu hnh cho flyweight . Trong trng hp ny bn mun ci t cho i tng Student ging nh mt tp hp cc hc vin c tht, v vy bn c th lu tr d liu sinh vin ( nh tn, m s, im ) bng mt dy nh sau:

DP4D

so snh hc vin ny vi hc vin khc, bn cn xc nh im trung bnh ( tng im chia cho s sinh vin ), m nh sau:

Trong v d ny, bn cn duy nht mt i tng flyweight Student, bn s truyn gi tr im s trung bnh qua hm khi dng ca Student nh sau:

DP4D By gi bn phi ci t i tng flyweight theo mun, thay v phi to tng i tng ring bit cho tng sinh vin mt. Hy xem cch thc vng lp sau thc hin:

Chy m trn v bn nhn c kt qu mong mun. i tng flyweight c cu hnh cho tng hc vin, th hin c tn v xp hng:

Thay v s dng ba i tng y , bn ch cn s dng mt i tng. Cng gn ging mu Singleton, tuy nhin tng ng sau mu Flyweight l kim sot vic to dng i tng, v s lng i tng theo bn mun. X l vn a lung Mu flyweight c s dng kim sot vic to dng i tng, nhng bn lu rng n cng b chung mt vn vi mu Singleton m chng ta nhc ti.Nu m ngun ca bn c s dng a lung, bn c th trnh vic to ra qu nhiu i tng flyweight bng cch tch ri qu trnh to i tng ra khi ton t new nh tng lm vi mu Singleton. Bn c th to i tng flyweight ngay khi lp c np ln u tin, ngn cn vic truy xut hm khi dng bng cch gn cho n mt truy cp cc b, v cho php vic to i tng thng qua hm getInstance.

DP4D

DP4D V d sau, cho thy khi lm vic vi phin bn mi, vic x l a lung c gii quyt

Chy on m trn, kt qu nh sau, bn s nhn c cng mt i tng khi chy cng lc hai lung: Ch : Vy s dng mu flyweight c hn ch no khng? Vn chnh l bn s mt thm thi gian ci t mt i tng flyweight v nu bn phi ci t bao bc mi th, bn c th s lm gim hiu nng h thng nhiu hn mong i. Mt hn ch na l: bi v bn tch mt lp mu

DP4D chung ra khi i tng to flyweight, bn phi thm vo mt lp khc trong vic lp trnh, v c th gy ra s kh khn trong vic bo tr v m rng. Download source code Csharp ti y

DP4Dummies Chng 6: Adapter, Facade


Chng 6: A MT CI CHT HNH TRN VO MT L HNH VUNG VI MU CHUYN I ADAPTER V MU MT TIN FAADE Trong chng ny, chng ta s i qua cc ni dung sau:

S dng mu chuyn i Adapter To mt adapter Chuyn i mt i tng Ace thnh i tng Acme X l cc rc ri vi vic chuyn i S dng mu faade i khi mt i tng khng tht s ph hp vi nhng g ta mong mun. Mt lp c th thay i, hoc mt i tng tr nn kh khn khi s dng. Chng ny s l gii php tt cho vn trn khi s dng hai mu thit k: mu chuyn i adapter v mu faade. Mu adapter cho php bn chuyn i mt i tng cung cp cho mt lp khc c th s dng chng. Mu faade cng tng t vy, n thay i v ngoi ca mt i tng, nhng c mt cht khc bit: bn s dng mu ny n gin ha cc chc nng ca n, lm cho n d lm vic vi i tng hay lp khc. Kch bn ca mu Adapter c, trng nhm pht trin MegaGigaCo ni, khi ang bc vo phng, Thu dn mi th, qun l ra lnh rng chng ta phi chuyn i c s h tng sang mt h thng mi , chng ta va mua t cng ty ca chu Gim c Hmm, cc lp trnh vin ni, l mt rc ri. Giao din khch hng trc tuyn ca chng ta cho php khch hng s dng phn mm t cng ty Ace v ng gi chng trong mt lp tn Ace. Lm sao chng ta c th chuyn i chng cho ph hp vi h thng mi? Ch c th l mt i tng Acme mi, trng nhm ni khng phi l i tng Ace Oh, khng, mi ngi ni Lm sao c th nh vy c Bn c th thy rc ri y. Hin ti, h thng ph hp vi mt i tng Ace nh hnh v

Nhng khi h thng thay i, n yu cu mt i tng Acme ( khng phi Ace), v vy i tng Ace khng thch hp na. Xem hnh sau:

DP4D

Ti c mt gii php. Bn ni. Mi ngi quay sang, v bn ni tip D nhin, vi t cch l mt t vn vin, ti s tnh chi ph cao cho vic ny OK, trng nhm ni. Bn cn s dng mu chuyn i Adapter, bn gii thch, Mu adapter cho php bn chuyn i mt lp hoc mt i tng sang mt lp hoc i tng mi m bn mong mun. Bn v ra gii php ln tm bng nh hnh sau:

Ah c nhm pht trin phn mm ni Chng ti ang hiu ra vn Tt bn ni Vy phi tr ph cho ti Chnh sa rc ri khi kt ni vi mu Adapter: Mu thit k Adapter cho php bn sa i mt giao din gia i tng v mt lp m khng phi sa i trc tip ln chng. Khi bn lm vic vi mt ng dng mua sn, sn phm bn nhn c thng khng tng thch vi nhng g bn tht s mun. y l phn c bit quan trng trong pht trin trc tuyn. Ngy cng nhiu cc cng ty to ra cc sn phm cho nhng cng ty ln, h ang b qua cc phn mm cho nhng cng ty nh . V iu tht ng xu h v vic tng thch ca h thng, phn mm t cng ty nh khng th giao tip vi mt hoc nhiu thnh phn khc trong ton h thng. Nhng vic chuyn sang mt gii php t tin th khng phi lc no cng cn thit. Thng thng, gii php c th l mt b chuyn i nh. Cch tt nht xem mu Adapter lm vic l thng qua v d. Hin ti giao tip ngi dng cng ty MegaGigaCo m ti nhc ti trong phn trc ca chng ny, d liu ngi dng c ng gi trong lp Ace. Lp ny qun l tn ca khch hng, vi hai hm sau: Nhng theo bn bit, cng ty MegaGigaCo ang chuyn sang s dng phn mm Acme, m cch thc qun l khch hng c khc mt cht. Vn y l phn mm Acme cn mt i tng Acme. i tng ny c ti bn hm, ch khng phi hai, dng qun l tn khch hng. Chng l:

DP4D V vy bn cn mt b chuyn i chc chn rng h thng mi Acme c th x l c i tng Ace. B chuyn i ny gi hai hm ca i tng Ace v m rng chng thnh bn hm m i tng Acme yu cu, nh hnh sau:

y chnh l cch thc lm vic ca mu Adapter Ghi nh: Sch ca GoF nh ngha mu Adapter nh sau: Chuyn i giao tip ca mt lp sang mt kiu giao tip khc m khch hng mong mun. Mu adapter cho php cc lp c th lm vic vi nhau cho d giao tip ca chng khng tng thch nhau Thng qua nh ngha chnh thc ca mu Adapter ni v cc lp, mu ny bao gm hai phn chnh nh sau: mt cho i tng, mt cho lp. Chng ta s xem xt c hai trong chng ny. Bn s dng mu Adapter khi bn c gng a mt ci cht hnh vung vo ci l hnh trn. Nu mt lp c giao tip khng tng thch, bn c thm thm vo mt b chuyn i ging nh b chuyn i in trong nhng chuyn du lch ton cu c th t c yu cu mong mun Mu ny c bit tt trong trng hp bn ang lm vic vi m ngun c m yu cu l kh ng c thay i m c, trong khi phn mm giao tip vi m ngun c ny li thay i. Gi n lc mu Adapter lm vic. To mt i tng Ace: Trc khi cng ty con ca MegaGigaCo ph hng mi th trong phng bn, i tng Ace ang qun l khch hng vi hai hm nh sau: setName v getName y l mt giao din vi hai hm sau:

i tng Ace s c to ra t lp AceClass, lp ny hin thc giao din trn

Vi hai hm setName v getName n gin nh sau:

DP4D

l tt c nhng g bn cn trong h thng c. Mt i tng Ace c tr v.Tuy nhin hin ti, cng ty bn chuyn sang h thng Acme, h thng mi cn giao tip vi i tng Acme . ( Mt ln na xin cm n cng ty con MegaGigaCo) To i tng Acme i tng Acme cn qun l tn khch hng vi bn hm sau: setFirstName, setLastName, getFirstName v getLastName. y l giao din ca n, AcmeInterface. M nh sau:

i tng Acme c to t lp Acme, hin thc giao din AcmeInterface nh sau:

V y l bn hm ca lp Acme

DP4D

Ti lc ny, bn c i tng Ace, v i tng Acme. By gi bn cn mt b chuyn i gn i tng Ace v h thng mi Acme. To i tung chuyn i Ace-to-Acme Bn mun to mt b chuyn i gip cho ng dng c th lm vic vi i tng Ace ( cho d n mong mun mt i tng Acme), v vy bn phi to mt i tng chuyn i. i tng chuyn i ny lm vic vi s kt hp composition ( xem chng hai bit thm v kt hp composition) mt b chuyn i lu tr chnh i tng m n mun chuyn i. Tip tc vi v d trong chng ny, ti t tn cho b chuyn i l AceToAcmeAdapter v bi v n trng ging mt i tng Acme, n s hin thc giao din AcmeInterface:

B chuyn i ny s dng i tng kt hp composition lu gi i tng chuyn i, l mt i tng AceClass. Bn c th chuyn i tng ny ti lp thng qua hm khi dng. M nh sau:

DP4D

im khc bit gia i tng Ace v Acme l i tng Ace cha tn khch hng nh l mt chui duy nht, trong khi i tng Acme lu tr tn v h khch hng ring bit. chuyn i gia i tng Ace v Acme, ti tch phn tn trong i tng Ace ra thnh tn v h. Bn vn c th nhn c tn khch hng lu tr trong i tng Ace khi s dng hm getName. M nh sau:

By gi bn c tn v h ca khch hng. tng thch vi i tng Acme, bn phi hin thc cc hm ca Acme nh setFirstName, setLastName, getFirstName v getLastName. M nh sau:

DP4D

Tuyt vi. Bn c mt b chuyn i. N lm vic ra sao? Cho chy th b chuyn i: Thng qua phn trn, bn chuyn i mt i tng Ace chng trng ging nh mt i tng Acme. Gi l lc thy cch mu Adapter lm vic. Bt u bng vic to mt i tng Ace cha thng tin khch hng tn Cary Grant.

Sau bn chuyn i tng Ace sang cho i tng AceToAcmeAdapter

DP4D

V tip tc, bn c th s dng cc hm ca Acme nh getFirstName v getLastName mt cch d dng, khng rc ri g:

Kt qu nhn c: l nhng g bn mong mun khi bn s dng i tng Acme tht s. Bn s dng mt i tng Acme t mt i tng Ace nh b chuyn i. l cch thc lm vic ca mu Adapter. Mt Adapter s dng mt composition lu tr mt i tng m n mun chuyn i, v khi cc hm ca b chuyn i c gi, n s thay i cc hm trong i tng gc sang cc hm ca i tng mi.on m gi mt b chuyn i s khng cn quan tm ti cch thc lm vic ca b chuyn i, v b chuyn i thc hin bn trong v tr v gi cn thit cho h thng. S dng mt i tng kt hp composition bao bc i tng chuyn i l mt thit k hng i tng tt, nh nhng g chng ta ni ti trong chng hai. V ch rng nu bn k tha mt i tng adapter, b bao bc adapter s c th qun l cc i tng k tha vi s thay i t nht. N GIN HA CUC SNG VI MU FACADE Mt mu thit k tng t vi mu Adapter l mu Faade. Hai mu ny lm vic theo cng mt cch, nhng mc ch s dng ca chng khc nhau. Mu adapter chuyn i m ngun lm vic c vi m ngun khc. Nhng mu Faade cho php bn bao bc m ngun gc n c th giao tip vi m ngun khc d dng hn.

DP4D V d nh, c mt ngi thit k ra mt ci my in, v a cho bn mt cch t ho. Lm sao my c th in? bn hi u tin, anh ta ni vi bn, gi hm khi ng. c bn ni. By gi n in cha? Cha, bn phi gi turnFanOn OK, gi n s in ch, bn hi Cha, hy gi hm lm nng my warmUp c ri. Gi n s in, phi khng? Vn cha. Bn phi gi hm getData a d liu t my vi tnh ti my in OK, hm getData. Cn g na khng? Hm nh dng d liu formatData V g na? Hm kim tra u mc checkToner, hm kim tra giy checkPaperSupply, hm kim tra h thng runInternalDiagnostic, hm Khoan , bn ni, vy vit cho ti mt hm i din faade cho tt c ci ng ln xn ny. Hm faade ny s gi tt c cc hm khc bn trong n, v n gin ha mt cch ng k vic giao tip. Ch vy thi l ci g?, ngi thit k my in hi Hm in n print, bn ni. Ch cn gi hm in n print, v my in hot ng. Khng cn lm g khc. Hey, anh ta ni c th l mt tng tuyt vi. By gi bn c th thm mt hm prepareToCallThePrintMethod , mt hm callThePrintMethod, mt hm cleanupAfterPrinting, mt hm Anh ng l ht thuc cha bn ni. Mu thit k Faade to ra mt giao din OOP d dng s dng. N l mt vn thit k c bn nu mt i tng hay mt lp qu kh giao tip, mu Faade to ra cho bn mt giao din giao tip d dng hn. y l nh ngha chnh thc ca GoF v mu Faade: Cung cp mt giao tip duy nht cho tp hp cc giao tip ca h thng. Faade nh ngha mt giao tip cao hn gip cc h thng con d dng s dng Thng thng, bn s dng mu Faade khi bn lm vic vi nhng m ngun c ng gi mt cch cu th. Khng phi ai cng l mt chuyn gia OOP, v bn cng nhanh chng thy c rng, khi bn lm vic trong mt mi trng pht trin phn mm thng mi rng ln . Khi bn tr nn mt mi giao tip vi nhng giao din c thit k rc ri v nhn thy rng, bn nhn c x,y thay v mt ci z n gin hn. l lc bn nn s dng mt giao din mi. (ND: t giao din trong cc on vn trn c nguyn vn ting anh l interface ti vn cha bit dng t ting vit no ph hp, c th hiu n l mt nn tng, cch thc giao tip gia cc i tng)

DP4D tng rt n gin; mt faade lm n gin ha mt giao tip interface ( s dng ngha chung ca t interface, khng phi giao din interface trong Java ) gia mt lp hay mt i tng.

Bn thng s dng mu thit k Faade khi bn mun m ngun n gin hn nhng li khng th chnh sa m ngun c. Thng qua vic s dng mu Faade bn c th gii quyt vn , n thm vo mt lp khc bn trn, v nu m ngun ca lp bn di thay i, bn cng phi thay i lun m ngun ca mu Faade. C mt nh ngha OOP lm vic y, i khi cn c gi l Nguyn tc v s hiu bit t nht , i lc c gi l Lut ca Demeter , i khi c gi l s ng gi hiu qu . y l tng nng cao s hiu qu ca OOP, bn khng mun nhng thc th ring bit (lp hay i tng) phi bit qu nhiu v nhau.Cng t cng tt, bn c th che du chi tit ca tng lp hay i tng v lm cho s lin kt ca chng lng lo cng nhiu cng tt. ( Xem chng bn bt thm v tho lng cc mi lin kt loose coupling) . Nu mt i tng cn phi bit qu nhiu v i tng khc, chnh l lc cn s dng mu Faade. Ghi ch: Hy tho lng cc mi lin kt cng nhiu cng tt. Lm vic vi mt i tng kh khn y l mt v d minh ha cch thc mu Faade lm vic. Cng ty bn va mua mt cng ty i th, ngi qun l ang rt hn hoan. Hmm bn ni Chng ta ang gp rc ri vi vn tng thch?. Sn phm ca h qu khc bit vi chng ta Phi l, ng ch ln ni Mi vic khng th n gin hn c, bn ni Lm sao ng c th t tn cho n Khng th n gin hn. C gi hm setFirstNameCharacter. N s t k t u cho tn OK, vy k t th hai ca tn th sao? Ch cn gi hm setSecondNameCharacter. Khng th n gin hn OK, ti tip tc. bn ni Vy t tn cho mt sn phm, ng gi hm setFirstNameCharacter tht lp k t u tin cho tn, sau gi hm setSecondNameCharacter thit lp k t th hai, v bng cch ng tip tc gi hm setFiveMillionNameCharacter thit lp k th th nm triu cho tn? Khng, ng ch ln ni Bn ch c th t tn vi by k t , bn ni Khng th n gin hn ng, ng ch ni

DP4D y l on m, sau khi bn hp nht vi sn phm ca cng ty mi, lp DifficultProduct

Bn t tn cho sn phm ny tng k t mt, s dng hm setFirstNameCharacter, setSecondNameCharacter, setThirdNameCharacter, v hm cho k t th t, th nm nh sau:

DP4D

V ly c tn sn phm, bn gi hm getName, tr v mt chui.

DP4D

y l cch to mt my in, t tn theo tng k t mt:

DP4D

Thy khng? ng ch ni khng th d dng hn Qu sc phi l. bn ni Ti s vit mt mu Faade To mt mu Faade n gin: ng ch ng cch ca bn v bn bt u vit mt faade n gin nh sau:

Faade ny phi bao bc i tng (i tng DifficultProduct trong v d). Thng thng, bn vit mt faade m cho php faade chnh sa giao din bn ngoi ca i tng. Bn cng c th chuyn tham s cu hnh vo hm khi dng ca faade, nhng iu khng cn thit trong v d ny, ta ch cn to mi i tng DifficultProduct nh sau:

Rc ri vi vic s dng i tng DifficultProduct nguyn thy l cch m ta thit lp tn cho n, s dng vng v mt lot cc hm setFirtNameCharacter, setSecondNameCharacter, setThirdNameCharacter v vn vn. sa cha , bn quyt nh cung cp mt faade vi mt hm n gin l setName t tn cho i tng. M nh sau:

DP4D

C mt hm khng cn dng Faade, l hm getName, m nh sau:

DP4D

By gi bn bao bc mt i tng kh giao tip v hp nht cc hm rc ri thnh hm d s dng. Hy xem cch thc hot ng ca mu Faade Chy th mu Faade u tin to mt i tng SimpleProductFacade, sau thit lp tn i tng printer vi hm setName v nhn li vi hm getName.

V y l kt qu:

DP4D Bn chinh phc c i tng kh khn vi giao din kh s dng bng mt faade. Download source code C# ti y

DP4Dummies Chng 7: Template, Builder


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:

DP4D

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:

DP4D

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

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

DP4D

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 hm start, stop, tuy nhin n c nhng s khc bit nh lp rp assembles 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:

DP4D

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:

DP4D

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 hmalgorithm, start, getParts, assemble, test v stop.

DP4D

Nu mt con robot s dng ng cc phng thc ny, v d nh hm start vstop, 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 hmgetParts s thng bo Getting a carburetor, hm assemble s thng boInstalling 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:

DP4D

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, hm assemble thng bo Baking a cookie, v hmtest thng bo Crunching a cookie

DP4D

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.

DP4D

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:

DP4D

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 testOK s tr v gi tr false, khng phi l true.

DP4D

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

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

DP4D

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

DP4D 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 hmaddTest 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:

DP4D

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

DP4D 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:

DP4D

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:

DP4D

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:

DP4D

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:

DP4D

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:

DP4D

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.

DP4D

DP4D 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:

DP4D

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

DP4D

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:

DP4D

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:

DP4D 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.

DP4Dummies Chng 8: Iterator, Composite


CHNG VIII: X L TP HP VI MU ITERATOR V MU COMPOSITE Trong chng ny: 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 S dng

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

DP4D 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.

DP4D 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

DP4D

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

DP4D

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:

DP4D

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:

DP4D

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:

DP4D

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

DP4D

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:

DP4D

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:

DP4D

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:

DP4D

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.

DP4D 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:

DP4D

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:

DP4D

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.

DP4D

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:

DP4D

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.

DP4D 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.

DP4D

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

DP4D

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.

DP4D

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.

DP4D Download source here

DP4Dummies Chng 9: State, Proxy


CHNG 9: KIM SOT I TNG CA BN VI MU TRNG THI STATE V MU I DIN PROXY Trong chng ny: S dng mu State trng thi xc nh kt qu Hiu v mu Proxy i din cho i tng ca bn

Cho

php

S dng proxy Kt ni vi cc proxy thng qua internet

Gim c iu hnh ca cng ty Apartments-N-Stuff Inc ng k dch v t vn ca bn v ni Chng ti ang hot ng cho thu cn h phc hp tri rng khp t nc. Vn ln nht ca chng ti l qun l ti sn, chi ph cho vic ny rt ln. V th chng ti ang chuyn i tt c cn h phc hp ca chng ti sang vic s dng cc robot phn phi t ng, n s chp nhn cc n thu nh v phn phi cha kha cho khch hng. Chng ti mun nhng ngi thu nh mi s c th np n cho h thng t ng ny, v khi h thng chp nhn, h s nhn c cha kha nh t h thng. Nghe tht tuyt, bn ni tng chnh l, v gim c ni tip Bnh thng, h thng t ng ny c t xung quanh cc ta nh v ch i cc khch hng tim nng. Khi mt ngi thu nh np n, my t ng ny s kim tra n. Nu n c chp thun, my t ng s phn phi cha kha cho ngi thu nh, ngc li h thng s thng bo t chi ngi thu nh v tr v trng thi ch i . V nu mt h thng t ng cho thu mt cn h, n cng phi kim tra bit chc rng cn trng cn h no trong dy nh phc hp khng, v s khng cho thu na nu ht cn h. V gim c iu hnh nhn bn ang v nguch ngoc v cui cng hi: Anh ang lm g ? Ti ang v mt biu trng thi, bn ni. Ti c th xem n khng?, V gim c hi Khng, bn ni ng cn bit thm nhiu kin thc hiu biu ny Oh, V gim c ni Chng ny ni v hai mu thit k: mu trng thi State, ni m mt i tng lu tr thng tin v cc trng thi ni ti ca n, v c th thay i hnh vi cho thch hp vi trng thi , v mu i din Proxy, ni m mt i tng c th hnh ng nh mt s thay th cho i tng khc. Bn s thy chi tit cch hai mu lm vic trong chng ny. Ghi nhn tnh trng ca bn vi mu State Bn hiu nhng g v gim c ni. H thng t ng cho thu s c 4 trng thi sau:

DP4D

l: ch mt ngi thu nh mi, nhn mt n thu nh, cho thu mt cn h, ht cn h cho thu. Hnh sau cho bn thy biu trng thi, ni m tng hp ch nht i din cho mt trng thi, v bn c th kt ni cc trng thi li vi nhau bit cch lm vic ca mt my t ng cho thu nh

Bn t ngh trong lng, y ng l ch p dng mu trng thi State. Thnh thong, khi bn tham gia vo mt d n ln, m ngun thng bt u rt ti tm . C qu nhiu iu kin c th xy ra m bn phi nm bt v rt kh bit u l cc ranh gii cng nh lm sao chia nh m ngun ra. Gi : Khi bn gp phi mt ng dng ln v m ngun khng kim sot ni, n thng gip cho bn bt u suy ngh ti khi nim v cc trng thi khc nhau.y l cng c gip bn chia nh m ngun ra thnh tng n v nh hn, l tng nht l tng trng thi ny phi c lp vi nhau, v t ng chia nh m ngun bn ra thnh tng phn ri rc. Ghi nh: Sch ca Gang o Four (GoF), ni rng mu thit k State s Cho php mt i tng thay i hnh vi khi trng thi ca chnh n thay i. i tng s xut hin thay i lp ca n. Ni cch khc, m ngun ca bn theo di cc trng thi ni ti, v d nh trng thi ch mt ngi thu nh mi Waiting for a new tenant. Phn khc ca m ngun s kim tra trng thi hin ti l g v s phn ng ph hp. V d, nu trng thi ca h thng l ht cn h cho thu Fully rented, v mt khch hng tim nng mi ti thu nh, khi a vo n thu nh, lp tc h thng s t chi n .

DP4D Khi bn s dng mu thit k State, mt phn m ngun c th kim tra trng thi hin ti l g. iu ny gip bn lm vic vi m ngun ln mt cch r rng v tp trung hn bi v bn phi kim sot hot ng ca tng on m ri rc, ch bng cc cch thay i trng thi hin ti. Ni chung, mu thit k State rt hu ch khi bn c nhiu m ngun m ngy cng phc tp v ri rm. Nu bn c th chia nh cng vic bng cch a chng vo cc trng thi c lp vi nhau, bn lm cng vic ca mnh d dng hn rt nhiu. S dng hm lu tr trng thi V d u tin, bn c gng to mt my t ng n gin, s dng trng thi. Bn quyt nh rng bn c th vit ng dng tp trung vo mt tp hp cc hm, cc hm ny c th hot ng da trn trng thi hin ti ca h thng. Bn bt u bng cch to tng hng s trng thi cho bn trng thi ca h thng. M ngun nh sau:

By gi bt c m ngun no trong ng dng cng c th kim tra tnh trng hin ti v p ng thch hp. V d m ngun sau ch ra cch thc hm getApplication lm vic, hm c gi khi h thng nhn mt n thu nh ca khch hng ch rng vic h thng x l s ph thuc vo trng thi ni ti:

DP4D

Vy nu h thng nhn c n thu nh v n ang trng thi FULLY_RENTED, h thng s in ra thng bo xin li, chng ti cho thu ht cn h. Sorry, were fully rented. Nu h thng nhn mt n thu nh v trng thi ca n l WAITTING, n s thng bo Thanks for the application.V thay i h thng t thay i trng thi sang GOT_APPLICATION. Tng t vy, nu bn gi hm checkApplication ca h thng, vic p tr s ty thuc vo tnh trng hin ti: V d, nu h thng c yu cu kim tra mt n thu nh, v n ang tnh trng WAITING, n s bo vi khch hng l h cn phi np n thu nh trc. Nu h thng ang tnh trng GOT_APPLICATION khi bn gi hm checkApplication, n s kim tra n thu nh v quyt nh chp nhn hay t chi khch hng ny. Quy trnh c m phng trong v d ny vi mt s ngu nhin nu n c chp nhn, chng trnh s a h thng v trng thi cn h cho thu APARMENT_RENTED v gi hm tn rentApartment; nu n b t chi, chng trnh s a h thng v trng thi ch WAITING.

DP4D

Hm rentApartment cng kim tra trng thi ni ti ca h thng nu trng thi l APARTMENT_RENTED, n s gim s lng cn h xung 1 n v, v gi hm phn phi cha kha nh, hm dispenseKeys.

Cui cng, hm dispenseKeys cng kim tra trng thi hin ti v nu trng thi l APARTMENT_RENTED, hm s gi cha kha nh ti ngi thu nh v a h thng v trng thi ch WAITING tip tc ch ngi thu nh k tip.

DP4D

tng chnh l nh vy bn lu tr trng thi ni ti v mi khi m ngun bn ngoi gi cc hm trong chng trnh, bn c th kim tra trng thi hin ti thc hin cng vic t hch hp. y l chng trnh th nghim. Trong chng trnh ny bn to mi mt i tng RentalMethods, a vo hm khi to mt s 9, ni rng c 9 cn h c th cho thu. Sau chng trnh gi hm getApplication v checkApplication m phng c mt ngi thu nh mi.

V y l kt qu

Khng t, bn to ra mt h thng t ng tip nhn v gii quyt cc yu cu thu nh cho khch hng.

DP4D Nhng c mt rc ri vi phng php da trn cc hm. l khi bn thm nhiu trng thi na, tng hm s tr nn di v di hn, v mi hm phi vit li cho tt c trng thi mi. Bn s lm g? Hy ng gi chng. S dng i tng ng gi trng thi Thay v lu tr tng trng thi trong cc hng s, c mt tng tt hn l a chng vo trong cc lp. Vi cch ny, bn c th gi hm dispensKeys hoc checkApplication trn i tng trng thi state bt c u trong m ngun. Tt c nhng g bn phi lm l np ng i tng trng thi state vo mt bin, v gi cc hm khc nhau trn bin . V d nu i tng state hin ti tng ng vi trng thi ch i, bn s nhn c mt tr li khc khi bn gi hm gotApplication hn l nu i tng hin ti tng ng vi trng thi cho thu ht, khi m khng cn cn h no na. Bn quyt nh lu gi trng thi hin ti trong mt i tng lm m ngun r rng hn. Lm sao thit k mt h thng t ng s dng mt i tng trng thi state? H thng ny lu tr trng thi hin ti trong mt i tng state, i tng ny c th lu tr mt trong bn i tng trng thi c th sau : WaitingState, GotApplicationState, ApartmentRentedState v FullyRentedState. Xem hnh sau:

Вам также может понравиться