You are on page 1of 22

Posted on Thng Hai 21, 2013by haihth

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 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 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. 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 bnYoure 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? 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 thcdescription 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:

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

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:

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:

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:

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

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

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:

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

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:

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.

You might also like