You are on page 1of 19

Posted on Thng Hai 23, 2013by haihth

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

S dng mu chuyn i Adapter To mt adapter Chuyn i mt i tng Ace thnh i tng Acme X l cc rc ri vi vic chuyn i

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

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

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

Ah c nhm pht trin phn mm ni Chng ti ang hiu ra vn Tt bn ni Vy phi tr ph cho ti Chnh sa rc ri khi kt ni vi mu Adapter:

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

Nhng theo bn bit, cng ty MegaGigaCo ang chuyn sang s dng phn mm Acme, m cch thc qun l khch hng c khc mt cht. Vn y l phn mm Acme cn mt i tng Acme. i tng ny c ti bn hm, ch khng phi hai, dng qun l tn khch hng. Chng l:

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

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:

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:

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

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

Kt qu nhn c:

l nhng g bn mong mun khi bn s dng i tng Acme tht s. Bn s dng mt i tng Acme t mt i tng Ace nh b chuyn i. l cch thc lm vic ca mu Adapter. Mt Adapter s dng mt composition lu tr mt i tng m n mun chuyn i, v khi cc hm ca b chuyn i c gi, n s thay i cc hm trong i tng gc sang cc hm ca i tng mi. on m gi mt b chuyn i s khng cn quan tm ti cch thc lm vic ca b chuyn i, v b chuyn i thc hin bn trong v tr v gi cn thit cho h thng.

S dng mt i tng kt hp composition bao bc i tng chuyn i l mt thit k hng i tng tt, nh nhng g chng ta ni ti trong chng hai. V ch rng nu bn k tha mt i tng adapter, b bao bc adapter s c th qun l cc i tng k tha vi s thay i t nht. N GIN HA CUC SNG VI MU FACADE Mt mu thit k tng t vi mu Adapter l mu Faade. Hai mu ny lm vic theo cng mt cch, nhng mc ch s dng ca chng khc nhau. Mu adapter chuyn i m ngun lm vic c vi m ngun khc. Nhng mu Faade cho php bn bao bc m ngun gc n c th giao tip vi m ngun khc d dng hn. V d nh, c mt ngi thit k ra mt ci my in, v a cho bn mt cch t ho. Lm sao my c th in? bn hi u tin, anh ta ni vi bn, gi hm khi ng. c bn ni. By gi n in cha? Cha, bn phi gi turnFanOn OK, gi n s in ch, bn hi Cha, hy gi hm lm nng my warmUp c ri. Gi n s in, phi khng? Vn cha. Bn phi gi hm getData a d liu t my vi tnh ti my in OK, hm getData. Cn g na khng? Hm nh dng d liu formatData V g na? Hm kim tra u mc checkToner, hm kim tra giy checkPaperSupply, hm kim tra h thng runInternalDiagnostic, hm

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

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

OK, vy k t th hai ca tn th sao? Ch cn gi hm setSecondNameCharacter. Khng th n gin hn OK, ti tip tc. bn ni Vy t tn cho mt sn phm, ng gi hm setFirstNameCharacter tht lp k t u tin cho tn, sau gi hm setSecondNameCharacter thit lp k t th hai, v bng cch ng tip tc gi hm setFiveMillionNameCharacter thit lp k th th nm triu cho tn? Khng, ng ch ln ni Bn ch c th t tn vi by k t , bn ni Khng th n gin hn ng, ng ch ni 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:

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

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

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

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

Rc ri vi vic s dng i tng DifficultProduct nguyn thy l cch m ta thit lp tn cho n, s dng vng v mt lot cc hm setFirtNameCharacter, setSecondNameCharacter, setThirdNameCharacter v vn vn. sa cha , bn quyt

nh cung cp mt faade vi mt hm n gin l setName t tn cho i tng. M nh sau:

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

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

V y l kt qu:

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

You might also like