You are on page 1of 68

Design Patterns

Gii thiu
Trnh by v design patterns[Gam95], mt cch tip cn da mu (pattern-based approach) c tc dng h tr cho pha thit k phn mm. (Nguyn do: Ch dng cc PP
phn tch thit k vn cha ...)

Lin h n cc tip cn tng t: analysis patterns, design heuristics, process patterns, ...

Ni dung
1. Dn nhp 2. Tng quan v mu thit k GoF 3. K tha v a hnh: c s cho cc mu GoF 4. Vi mu GoF tiu biu v ng dng 5. Cc tip cn tng t

Dn nhp
Xu hng s dng mu trong cng vic chuyn mn, trong hc tp:
Cc mu, khun c dng trong cc ngnh cng nghip khc nhau (in n, c, ...) Cc bi tp mu cho hc sinh, sinh vin Cc mu chng trnh Cc mu hng dn thit k giao din vi ngi dng ...

Dn nhp
Ngun gc ca mu thit k phn mm
Ngn ng? mu ca kin trc s C. Alexander [Alex77]: thit k nh bng cch lp rp cc khun mu c sn tng cho vic su tm v s dng cc mu phn mm Cc idiom trong lp tr?nh C++ [Cop92]

Dn nhp
Thut ng - Cc t: sample, pattern, template,... - Design patterns: Patterns in Objectoriented software design - a design pattern: an elegant solution to a specific problem in OO software design - Thut ng ting Vit...

nh ngha
nh ngha mt mu (pattern) ni chung: Mt mu l mt cp (vn , li gii) c th p dng trong nhiu tnh hung, ng cnh khc nhau. Mi mu thng bao gm cc b phn sau:
Tn Ni dung vn Li gii (phi tng qut c th dng trong nhiu tnh hung) Cc h qu mang li v v d p dng

Tng quan v mu thit k GoF


Ngun gc lch s vTc gi
Gm 23 mu thit k ca 4 tc gi: Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides; Cc mu ny cn c gi l mu GoF (Gang of Four)

Finding patterns is much easier than describing them

Tng quan v mu thit k GoF


Ngun gc lch s vTc gi
Gm 23 mu thit k ca 4 tc gi: Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides; Cc mu ny cn c gi l mu GoF (Gang of Four)

Finding patterns is much easier than describing them

Tng quan v mu thit k GoF


Ngun gc lch s vTc gi
Khong trong ca b mu ny c ngun gc t lun n tin s ca Erich Gamma. Cc tc gi gp nhau ti 2 hi ngh? OOPSLA91 v OOPSLA92 (Object-Oriented Programming Systems, Languages, and Applications Conference); Sau cng lm vic son li mt b gm 23 mu v trnh by ti hi ngh ECOOP93 (European Conference on Object-Oriented Programming).

Cu trc chung m t mu GoF


Tn v Phn loi Mc ch, nh: m t ngn gn v ma?u B danh Motivation: trnh by mt tnh hung c th trong thit k phn mm dn n vic s dng mu ny gii quyt vn . Kh nng ng dng: gi cc tnh hung trong thit k m c th ng dng mu ny

Cu trc chung m t mu GoF


Cu trc: m t mu bng cc k hiu hnh thng dng trong cc phng php p.tch/t.k (k hiu OMT, UML, ...) Cc thnh vin: trnh by ngha ca cc lp/i tng tham gia vo mu thit k v trch nhim ca chng S cng tc: cc thnh vin (lp/i tng) ca mu cng tc nh th no thc hin trch nhim ca chng Cc h qu mang li

Cu trc chung m t mu GoF


Ch lin quan n vic ci t M ngun minh ha Nu ra nhng v d v cc h thng thc t ( c pht trin v ang chy) m c s dng mu ny Cc mu lin quan: nhng mu no c lin h vi mu ny, nhng im quan trng cn phi phn bit; mu ny c th dng phi hp vi nhng mu no.

Danh sch 23 mu GoF


CA C MA U VE TA O LA P L P hay O I T NG Te n
Abstract Factory (Fabrique Abstraite) Builder (Monter) Factory Method (Fabrication) Prototype

Mu c ch
Cung ca p mo t interface cho vie c ta o la p ca c o i t ng (co lie n hev i nhau) ma kho ng ca n qui nh l p khi ta o mo i o i t ng Ta ch r i vie c xa y d ng (construction) mo t o i t ng ph c ta p kho i bie u die n cu a nosao cho cu ng mo t tie n trnh xa y d ng cotheta o c ca c bie u die n kha c nhau nh ngh a mo t interface eta o la p o i t ng nhng u y nhie m vie c instanciation cho ca c l p con (ca c l p ke th a) Qui nh loa i cu a ca c o i t ng ca n ta o ba ng ca ch du ng mo t o i t ng ma u, ta o m i nh va o sao che p o i t ng ma u na y. Ca i a t l p ma ch como t thehie n (o i t ng) duy nha t

Singleton

CA C MA U VE CA U TRU C L P hay O I T NG Te n
Adapter (adapteur) Bridge (Pont) Composite

Mu c ch
Do va n etng thch, thay o i interface cu a mo t l p tha nh mo t interface kha c phu h p v i ye u ca u ng i sdu ng l p. Ta ch r i ngngh a cu a mo t va n ekho i vie c ca i a t ; muc ch ecahai bopha n (ngngh a vaca i a t) cothethay o i o c la p nhau. Toch c ca c o i t ng theo ca u tru c pha n ca p da ng ca y; Ta t ca ca c o i t ng trong ca u tru c c thao ta c theo mo t ca ch thua n nha t nh nhau. Ga n the m tra ch nhie m cho o i t ng (mro ng ch c na ng) va o lu c chay (dynamically). Cung ca p mo t interface thua n nha t cho mo t ta p h p ca c interface trong mo t hetho ng con (subsystem). Sdu ng vie c chia seethao ta c hie u quatre n mo t sol ng l n o i t ng cnho (cha ng ha n paragraph, do ng, co t , ky t ...) ie u khie n mo t ca ch gia n tie p vie c truy xua t mo t o i t ng tho ng qua mo t o i t ng c u y nhie m.

Decorator (De corateur) Facade (Faade) Flyweight (Poids mouche) Proxy (Procuration)

CA C MA U VE NG X CU A L P hay O I T NG (1) Te n Mu c ch
Chain of Responsibility Kha c phu c vie c ghe p ca p gi a bog i va bonha n tho ng (Chane de ie p; Ca c o i t ng nha n tho ng ie p c ke t no i tha nh responsabilite s) mo t chuo i va tho ng ie p c chuye n doc theo chuo i na y e n khi ga p c o i t ng xlyno . Command Mo i ye u ca u (thc hie n mo t thao ta c na o o ) c bao (Commande) bo c tha nh mo t o i t ng. Ca c ye u ca u se c lu trva g i i nh ca c o i t ng. Interpreter Hotr vie c nh ngh a bie u die n va n pha m va botho ng (Interpreteur) d ch cho mo t ngo n ng . Iterator Truy xua t ca c pha n tcu a o i t ng da ng ta p h p tua n t (Ite r ateur) (list, array, ...) makho ng phu thuo c va o bie u die n be n trong cu a ca c pha n t . Mediator nh ngh a mo t o i t ng ebao bo c vie c giao tie p gi a (Me diateur) mo t soo i t ng v i nhau. Memento Hie u ch nh va trala i nh cutra ng tha i be n trong cu a o i t ng ma va n kho ng vi pha m vie c bao boc dlie u.

CA C MA U VE NG X CU A L P hay O I T NG (2) Te n
O bserver (O bservateur) State (Etat) Strategy (Strate gie) Template method (Patron de me thode) Visitor (Visiteur)

Mu c ch
t-nhie u gi nh ngh a s phu thuo c mo a ca c o i t ng sao cho khi mo t o i t ng thay o i tra ng tha i th ta t ca ca c o i t ng phu thuo c no cu ng thay o i theo. Cho phe p thay o i ng x cu a o i t ng tu y theo s thay o i tra ng tha i be n trong cu a no . Bao bo c mo t ho ca c thua t toa n ba ng ca c l p o i t ng e thua t toa n co the thay o i o c la p o i v i chng trnh s du ng thua t toa n. nh ngh a pha n khung cu a mo t thua t toa n, t c la mo t thua t toa n to ng qua t go i e n mo t so phng th c cha c ca i a t trong l p c s ; vie c ca i a t ca c phng th c c u y nhie m cho ca c l p ke th a. Cho phe p nh ngh a the m phe p toa n m i ta c o ng le n ca c pha n t cu a mo t ca u tru c o i t ng ma kho ng ca n thay o i ca c l p nh ngh a ca u tru c o .

K tha, a hnh: c s cho mu GoF


n

Ly mt v d n gin

Cc phng thc virtual : Draw(), Area(), Load(), Input()

HINH

TRON

CHUNHAT

TAMGIAC Co cai at cu the cho cac phng thc: Draw(), Area(), Load(), Input()

Cc phng thc thch hp s c gi ty theo kiu ca i tng: HINH *p; p = new CHUNHAT; p->Input(); // phng thc Input ca CHUNHAT s c gi. Cc thao tc tng qut trn kiu HINH khng nn c cc ch th ph thuc cc lp k tha. void ThaoTac(HINH *p) { // ch s dng phng thc chung. If(p->Load()) { p->Input(); p->Draw(); ... } } ==> KHNG NN p kiu p, chng hn thnh TRON, ri gi cc phng thc ring ca lp TRON.

Vi mu GoF tiu biu v ng dng


Phn ny s trnh by cc mu tiu biu sau y: Composite Bridge Template method Observer ngn gn, mt vi mc trong 13 mc ca cu trc m t mi mu s c b qua. Chng ta s quan tm nhiu n ngha, tnh hung cn dng v v d ng dng.

Mau Composite
Tn: Composite, tm dch i tng a hp,
thuc lp mu cu trc i tng.

nh:T chc cc i tng theo cu trc


phn cp dng cy; Tt c cc i tng trong cu trc c thao tc theo mt cch thun nht nh nhau

Motivation: Cc ng dng ha thng lu


tr cc i tng phc hp bao gm nhiu i tng n gin hn. V d nh trong hnh v sau:

Mu composite gii quyt vn ny bng cch t chc tch hp d liu qui nh sau:

Cu trc:

Lu tr mch in

Tn: Bridge, tm dch Cu ni, thuc lp mu cu trc i tng. nh:Tch ri ng ngha ca mt vn khi
vic ci t; mc ch c hai b phn (ng ngha v ci t) c th thay i c lp nhau.

Mau Bridge

Motivation: Gi s phi xy dng mt lp qun


l h thng ca s ca cc h iu hnh khc nhau, chng hn cho 3 h: X Window trn Unix, IBMs Presentation Manager (PM), v MS Windows ca Microsoft. Cch lm t nhin l nh ngha mt lp c s Window v 3 lp khc Xwindow, PMwindow, MSwindow k tha t lp Window nh sau:

Window

xWindow

pmWindow

msWindow

Gi s c cn thm lp qun l cc hp hi thoi Dialog - mt dng Window c bit. Nh vy lp Dialog s l c bit ha ca lp Window (k tha t lp Window). K n li l 3 lp hi thoi cho 3 h thng ca s khc nhau k tha t Dialog Window

xWindow

pmWindow

msWindow

Dialog

xDialog

pmDialog

msDialog

Cch t chc ny bc l cc khuyt im nh sau:


Bt tin khi m rng: b sung h thng ca s cho mt h iu hnh khc hay thm cc loi ca s khc (chng hn lp cc tool bar hay cc control...). Cc chng trnh s dng h thng lp ny s ph thuc h iu hnh. Tn cc lp ph thuc h iu hnh b ri khp trong cy k tha.

Mau Bridge

Mau Bridge
tng ca mu bridge l tch bit hai phm tr:
ngha ca cc ca s (Window, Dialog, ToolBar, ...) s ci t ph thuc cc h iu hnh

thnh 2 cy k tha ring bit v ni nhau


bng mt cu

Cu trc:

Mu Template method
Tn: Template method, tm dch Phng thc
khun, thuc lp mu v ng x ca lp

nh: nh ngha phn khung (phn bt bin)


ca mt thut ton, tc l mt thut ton tng qut gi n mt s phng thc (phn thay i ty vo ng cnh) cha c ci t trong lp c s. Vic ci t ca cc phng thc ny c y nhim cho cc lp k tha. Thut ton chy c cho cc lp k tha m cu trc ca thut ton vn khng thay i.

Cu trc
Phng thc khun: phn khung ci t cu trc chung ca thut ton

Phn thay i theo ng? cnh, vic ci t c y nhim cho cc lp k tha

Trong ci t cu trc khung ca thut ton se? gi n cc phng thc c ci t tre?


Ch l phi khng ci t li phng thc khun TemplateMethod trong lp k tha

Mu Template method
C s ci t: da vo s a hnh cho cc phng thc c gi bn trong phng thc khun. Xem v d n gin vit bng C++ sau y

OpenDocument() l mt phng thc khun

Gi cc phng thc cha ci t S ci t trong lp k tha

void Application::OpenDocument (const char* Chname) rng cc p. thc ny { s c ci t li trong cc if (!CanOpenDocument(name)) lp k tha. Chng hn nh { trong lp MyApplication th // cannot handle this document p.thc DoCreateDocument return; tr v mt i tng kiu } MyDocument. Nh vy, Document* doc = DoCreateDocument(); i tng doc c kiu l if (doc != NULL) MyDocument v lnh gi { doc->DoRead s gi _docs->AddDocument(doc); phng thc DoRead ca AboutToOpenDocument(doc); lp MyDocument. doc->Open(); doc->DoRead(); } }

V d: Thut ton cy khung


Spanning Tree Algorithm PRIM Algorithm Bc 1. Chon tuy y v X va khi tao V := { v }; T := Bc 2. Chon canh e co trong so nho nhat noi nh xX vi nh y X \ V Bc 3. Gan V := V{y} va T:=T{e} Bc 4. Neu T u n-1 phan t th dng, ngc lai lam tiep tuc bc 2.

Bc 1. Chon tuy y v X va khi tao V := { v }; T := Bc 2. Chon y X \ V sao cho co mot canh e nao o cua G noi y vi mot nh x trong V
Bc 3. Gan V := V{y} va T:=T{e} Bc 4. Neu T u n-1 phan t th dng, ngc lai lam tiep tuc bc 2.

class ARC { // Some members... // ... }; class SpanningTree { int n; int nT; // Some other members... // ... void initialize(); void add_Vertex_to_V(int y); void add_Arc_to_T(ARC e); virtual int search_Arc(ARC& e, int& x, int& y); int SpanningTreeAlgorithm();

int SpanningTree::SpanningTreeAlgorithm() { initialize(); while(nT < n-1){ ARC e; int x, y; if(!search_Arc(e, x, y)) return 0; add_Vertex_to_V(y); add_Arc_to_T(e); } return 1; }

};

class PrimSpanningTree: public SpanningTree{ int search_Arc(ARC& e, int& x, int& y) { // to find the minimum arc.. // ... return 1; }; };

Mu Adapter
Mc ch: thay giao tip ca mt lp bi mt giao tip khc ph hp vi yu cu ngi s dng lp, nhm gii quyt bi ton tng thch. Cu trc ca mu Adapter: c 2 dng
Multiple composition Object composition

Adapter structure (Multiple inheritance)

Adapter structure (Object composition)

p dng: cc control ca MFC

RhodesWidget ChosirElementCourant( ) AjouterElement( ) SupprimerElement( ) ViderContenu( )

p_Rubrique 1 CWnd

RhodesTreeWidget ChosirElementCourant( ) AjouterElement( ) SupprimerElement( ) ViderContenu( ) RhodesListBox ChosirElementCourant( ) AjouterElement( ) SupprimerElement( ) ViderContenu( )

RhodesListWidget RhodesListCtrl

RhodesEditWidget ChosirElementCourant( ) AjouterElement( ) SupprimerElement( ) ViderContenu( )

RhodesListBox( ) { p_Rubrique = new CListBox ; }


CListBox *p_ListBox=(CListBox *) p_Rubrique ; int idx = p_ListBoxGetCurSel( ); if (idx>=0 && idx< p_ListBoxGetCount( )) p_ListBoxGetText(idx, ElementCourantTexte);

RhodesComoBox

Mu Observer
Tn: Observer, tm dch Quan st vin, thuc lp
mu v ng x ca i tng

nh:nh ngha quan h ph thuc mt-nhiu


gia cc i tng. Khi mt i tng thay i trng thi, tt c cc i tng ph thuc c thng bo v cp nht trng thi.

Motivation: Trong cc phn mm c giao din


ha vi ngi s dng, thng thng c nhiu biu din ha khc nhau cho cng mt l d liu, khi d liu thay i th tt c cc biu din ha phi c cp nht

Hnh v sau minh ha trng hp ca cc bng tnh in t (Excel, Lotus 1-2-3..):


OBSERVER

Cu trc

Mu proxy
Mc ch: Truy xut mt i tng thng qua
mt i tng c y nhim

Dng trong cc trng hp


Remote object Expensive cost of creation and initialization of the object To protect the original object A smart reference
Count number of references to the real object: to free automatically Loading a persistent object into memory when it's first referenced Checking that the real object is locked

Code example (Proxy)


class Graphic { public: }; class Image : public Graphic { public: Image(const char* file); // loads image from a file }; class ImageProxy : public Graphic { public: ... ImageProxy(const char* imageFile); Image* GetImage(); private: Image* _image; Point _extent; char* _fileName; }; ImageProxy::ImageProxy (const char* fileName) { _fileName = strdup(fileName); _extent = Point::Zero; // don't know extent yet _image = 0; } Image* ImageProxy::GetImage() { if (_image == 0) { _image = new Image(_fileName); } return _image; } const Point& ImageProxy::GetExtent () { if (_extent == Point::Zero) { _extent = GetImage()>GetExtent(); } return _extent; }

Mu prototype
Muc ch: Qui nh loai cua cac oi tng can tao bang cach dung mot oi tng mau, tao mi nh vao sao chep oi tng mau nay.

Mu prototype: v d

Mau prototype: code example


class Staff : public Graphic { public: Staff(); Staff(const Staff&); virtual Staff* Clone(); ... }; Staff::Staff (const Staff& other) { // copying members... } Staff* Staff::Clone () { return new Staff(*this); } struct Mapping { char *ObjectType; Graphic* Object; }; Mapping sampleobjects[]={ {Staff, new Staff()}, {WholeNote, new WholeNote()}, {HalfNote, new HalfNote()} }; Graphic* sampleSearch(char* strType){ } Graphic* objCreate(char* strType){ Graphic* sObj=sampleSearch(strType); if(sObj!=NULL) return sObj->Clone(); else return NULL; }

Mu strategy
Mc ch: bao bc mt h cc thut ton bng
cc lp i tng ng dng c th chn la thut ton khi cn

Mu strategy: v d

SortTesting* qsortTest= new SortTesting(new QuickSort); // Data input qsortTest->sortAlgorithm();

Mu state
Mc ch: cho php thay i ng x ca i tng ty theo s thay i trng thi bn trong ca n Mu ny rt ging vi mu strategy v mt hnh thc, tuy nhin khc v ngha

Mu state: v d

Cc tip cn tng t
Cc tip cn dng li theo kiu pattern:
Design patterns [Gam95] GRASP pattern [Lar98] Analysis patterns [Fow97] Process patterns [Amb99]

Cc kinh nghim phng php lun nh hng cho qu trnh thit k


Design heuristics [Rie96] GRASP: General Responsibility Assignment Software Patterns.

Cc tip cn tng t
Vic h tr dng li cho qu trnh pht trin phn mm
Frameworks Software components

Design heuristics
Khi nim: Mi heuristic thit k l mt hng dn sc tch v mt phng php lun cho mt vn nh trong thit k phn mm. Ngun gc: T. gi Arthur J. Riel [Rie96] thu thp v h thng ha 61 heuristic lin quan n thit k phn mm hng i tng. M s ca cc heuristic sau y c ly theo ti liu gc ca tc gia

Vi heuristic chung v lp v i tng


Heuristic 2.1: D liu ca lp nn c che
du bn trong lp (Vic thao tc d liu ca lp nn thc hin gin tip qua cc phng thc)

Heuristic 2.7: Mt lp ch nn dng cc


phng thc, cc php ton trong phn giao tip Public ca lp khc. H qu: gim s coupling gia cc lp. Nh vy khng nn dng c ch friend nh ca C++ truy xut vo cc phn ci t bn trong lp khc.

Heuristic 2.5: Khng nn trnh by ci t chi tit ca cc phng thc khc nhau c on m ngun ging nhau trong giao tip Public ca lp
X private Nn chuyn thnh public f1( ), f2( ) f1( ) { ... oan ma Y ... } f2( ) { ... oan ma Y ... }

f2( ) { ... f( ); ... }

X private f( ) Public f1( ), f2( ) f2( ) { ... f( ); ... }

f( ){ oan ma Y }

Heuristic 5.2: Cc lp k tha phi c tri thc


v lp c s ca chng (do quan h k tha), nhng lp c s khng nn bit bt k iu g v lp k tha ca n. L do: V nu lp c s c cha tri thc v cc lp k tha th khi c thm lp k tha mi t lp c s , m ngun ca lp c s c kh nng b thay i.
A

A khng nn bit thng tin g v B, nu A c tri thc v B th A s mt tnh tng qut

Vi heuristic chung
Heuristic 5.4 v 5.5: V mt l thuyt, s
phn cp cc lp k tha cng mn (nhiu tng) cng tt. V mt thc hnh, s tng phn cp khng nn vt qu mt s trung bnh m mt ngi thng thng c th theo di tt cc lp trong cy k tha. Con s trung bnh ny khng nn vt qu 6 tng.

Heuristic 5.8: Cc thuc tnh v phng thc


chung cho nhiu lp nn tng cao nht c th c trong phn cp k tha.

Heuristic 5.9 v 5.10:


Nu hai hay nhiu lp ch chia s chung phn d liu (khng c phng thc chung) th phn d liu chung nn l mt thuc tnh c kiu l mt lp mi bao bc phn d liu chung . Nu hai hay nhiu lp chia s chung d liu v cc phng thc th cc lp nn k tha t mt lp c s chung m bao gm d liu v cc phng thc .

Heuristic 5.12: Khng nn dng k thut kim


tra kiu ca i tng. Trong hu ht cc trng hp, c th dng a hnh gii quyt vn
if x is of type 1 then do this else if x is of type 2 then do this else if ...

Type
do_this()

Nn chuyn thnh

Type 1 do_this()

Type2 do_this()

... ...

Heuristic 5.13:Trng hp cn kim tra gi tr


thuc tnh ca i tng ca lp thc hin cc ng x hon ton khc nhau th lp nn phn r thnh nhiu lp, mi gi tr ca thuc tnh s l mt lp k tha t lp c s.

Heuristic 5.14: Khng chuyn cc i tng


ca mt lp thnh cc lp k tha, phi cn thn bi v nhiu khi lp k tha ch l mt th hin (mt i tng) ca lp c s.

You might also like