133
Series bài dch Design Paern for Dummies Tác gi: haihth (hp://congdongcviet.com/ ) Page 1 Series bài dch Design Pa ern for Dummies Tác gi: haihth from congdongcviet.com Tng hp: hoangedward from congdongcviet.com 

Design Pattern VN

Embed Size (px)

Citation preview

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 1

    Series bi dch Design Pattern for Dummies

    Tc gi: haihth from congdongcviet.com

    Tng hp: hoangedward from congdongcviet.com

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 2

    Mc Lc Series bi dch Design Pattern for Dummies ................................................................................................ 3

    Li gii thiu ............................................................................................................................................................. 4

    MU STRATEGY Chng II: Sp t k hoch hnh ng vi mu chin lc ............................... 7

    CHNG III: TO V M RNG MT I TNG VI MU DECORATOR V FACTORY ......... 25

    CHNG V: T MT CHO TI NHIU - MU DUY NHT SINGLETON V MU FLYWEIGHT ... 45

    Chng VI: A MT CI CHT HNH TRN VO MT L HNH VUNG VI MU CHUYN

    I ADAPTER V MU HNH DNG FAADE ............................................................................................. 67

    Chng 7: TO HNG LOT I TNG VI MU TEMPLATE (Khun Mu ) V MU

    BUILDER ( Th Xy ) ........................................................................................................................................... 84

    CHNG VIII: X L TP HP VI MU ITERATOR V MU COMPOSITE .................................. 111

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 3

    Series bi dch Design Pattern for

    Dummies Li gii thiu http://diendan.congdongcviet.com/showthread.php?t=46958 Chng II- Mu chin lc Strategy - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=46977

    Chng III- Mu Decorator v Factory - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=47340 Chng V : Mu Singleton v Flyweight - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=47868

    Chng 6 mu Adapter v mu Facade - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=63363 Chng 7 Mu Template v Builder - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=51142 Chng 8 mu Iterator v mu Composite - Series bi dch Design Pattern for Dummies http://diendan.congdongcviet.com/showthread.php?t=60497

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 4

    Li gii thiu

    Xin cho cc thnh vin trong din n !

    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.

    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 nh 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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 5

    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 dn lp trnh. Tuy nhin ti liu v design patterns cng khng nhiu(mnh bit khong vi 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.

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 6

    Mi chng mnh s lp mt topic cc bn tin theo di v tranh lun.

    Thanks all

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 7

    MU STRATEGY

    Chng II: Sp t k hoch hnh ng

    vi 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

    Bn v cc chuyn gia thit k mu, 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 quang phng.

    Hp ng ny s em n ngun thu nhp 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 tt c cc vn v tht 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 ,

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 8

    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 tht 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 phn mm do nh xut bn Addison Wesley, 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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 9

    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.

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 10

    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 thc) 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:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 11

    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:

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 12

    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 lp StreetRacer nh sau:

    Kt qu nhn c

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 13

    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 xe helicopter nh sau:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 14

    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 :

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 15

    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:

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 16

    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.

    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 is-a, 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 nh StreetRacer, 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 thc go 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 bn Now Im driving. V y l m

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 17

    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

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 18

    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:

    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 ton GoByDrivingAlgorithm:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 19

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 20

    Kt qu:

    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 lp StreetRacer 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 sang Now Im flying at 20 mph. n gin, bn ch cn chnh sa thut ton GoByFlying:

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 21

    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:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 22

    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.

    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,

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 23

    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:

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 24

    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.

    Source code Visual Studio 2008 C#. Download ti y Ht chng II. n tip tun sau...

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 25

    CHNG III: 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 ng 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

    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 cc phiu n c trn my tnh tin v khi ng li.

    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 ni, ngc nhin khi bn ni v vn ny Ti ni vn ny c ngn ln ri

    Bn cm ci Hamburger pho mt tht xng khi vi v hnh phc v ni Thm mt vi lt

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 26

    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 M cho vic m rng. ng 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.

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 27

    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?

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 28

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 29

    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 qu Youre 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 vo and 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 thc description 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?

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 30

    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

    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 tn description. 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 ring khc 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 computer v thm vo dng ch and a disk nh sau:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 31

    Vy l bn bao bc i tng computer, v khi bn gi phng thc description ca 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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 32

    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

    By gi hy thm vo mt monitor:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 33

    Sau , bn c thm vo khng ch mt CD, m l hai CD chng hn. Khng vn g kh khn 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

    Ti y, cng ty MegaGigaCo, bn c tr gi 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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 34

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 35

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 36

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 37

    Kt qu, bn c mt lp nh my factory.

    To mt lp kt ni Connection tru tng

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 38

    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,MySQLConnecti on. 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:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 39

    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:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 40

    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.

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 41

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 42

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 43

    SecureMySqlConnection. Tht d dng to chng ,bt u t lp SecureOracleConnection, vi hm description tr v vn bn Oracle Secure:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 44

    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 vit bng ngn ng C# - Decorator

    - Factory

    - Factory V2

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 45

    CHNG V: T MT CHO TI NHIU -

    MU DUY NHT SINGLETON V MU

    FLYWEIGHT

    Trong chng ny:

    S dng mu duy nht Singleton V d v Singleton ng b ha loi b cc vn rc ri trong a lung. Mt cch tt hn x l a lung S dng mu hng rui flyweight

    Trong kh nng l mt nh t vn lng cao 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 c s d liu 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 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 c mt cht khc bit y. Mt th thut c s dng y.

    To mt i tng duy nht vi mu duy nht Singleton

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 46

    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 ngu62n, v rc ri l tng i tng ny 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 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 ).

    Mt lp c s d liu Database da trn kiu Singleton bt u vit mt t 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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 47

    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.

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 48

    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 ring t:

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

    OK. u tin bn ngn chn vic khi to bng ton t new. V by gi cch duy nht l to mt hm trong lp 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 ton cc bn c th truy cp ti n thng qua tn lp ( v d nh Database.getInstance()) (ND: public v static s gip cho hm cng cng v ton cc, xem li cc khi nim OOP )

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 49

    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.

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 50

    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:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 51

    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:

    C mt l hng tim tng y, 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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 52

    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:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 53

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 54

    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?

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 55

    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?

    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

    y l tng 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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 56

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 57

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

    V khi chng trnh hot ng. Bn thy rng bn ang nhn c cng mt i tng.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 58

    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 flyweights m bn c th ci t vo lc thc thi chng trnh chng trng 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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 59

    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:

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 60

    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 mi tng quan ca hc lc hc vin v im trung bnh . M nh sau:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 61

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 62

    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:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 63

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 64

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 65

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 66

    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 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 vit bng C sharp ti y Flyweight

    Singleton

    Singleton Multi Threading

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 67

    Chng VI: A MT CI CHT HNH

    TRN VO MT L HNH VUNG VI

    MU CHUYN I ADAPTER V MU

    HNH DNG FAADE

    Trch dn:

    Trong chng ny: - 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 thch 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, Gi tt c mi th, qun l ra lnh rng chng ta phi chuyn i c s h tng sang mt h thng mi, h thng c bn bi cng ty con ca gim c

    Hmm, cc lp trnh vin ni, l mt vn . 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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 68

    tng Ace khng thch hp na. Xem hnh sau:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 69

    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:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 70

    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:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 71

    V y l bn hm ca lp Acme

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 72

    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:

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 73

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 74

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 75

    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.

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 76

    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 - cha c ngha ting vit c th, c th hiu n l mt nn tng,cch thc giao tip gia cc i tng)

    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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 77

    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

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 78

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 79

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 80

    Thy khng? ng ch ni khng th d dng hn

    Qu cho s 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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 81

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 82

    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.

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 83

    V y l kt qu:

    Bn chinh phc c i tng kh khn vi giao din kh s dng bng mt faade.

    Cm n bn haihth dch

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 84

    Chng 7: TO HNG LOT I TNG

    VI MU TEMPLATE (Khun Mu ) V

    MU BUILDER ( Th Xy )

    Trong chng ny, chng ta s i qua:

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

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 85

    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 here, n s lm cho robot lm vic bng cch gi cc hm start, getParts, assemble, test v stop nh sau:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 86

    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:

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 87

    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 assemble s khng hin th

  • Series bi dch Design Pattern for Dummies Tc gi: haihth (http://congdongcviet.com/)

    Page 88

    Getting a carburetor m thay vo l Getting flour and sugar

    l ni m mu thit k Template Method c p dng. Mu ny ni rng, bn c th vit mt phng thc, dng xc nh mt lot cc thut ton, ging nh hm go m bn thy trc y, chy mt lot cc chc nng cho robot nh hnh:

    Sau bn a hm ny vo mt b khun template bng cch cho php cc lp con nh ngha li cc bc thut ton theo cch cn thit. Trong trng hp ny, lm mt con robot nng bnh, bn s vit li cc hm getParts, assemble, v test.

    Theo nh ngha chnh thc ca sch GoF, mu Template Method nh sau: nh ngha mt b khung ca mt thut ton trong mt chc