You are on page 1of 68

Design Patterns

Gi i thi u
Trnh by v design patterns[Gam95], m t cch ti p c n d a m u (pattern-based approach) c tc d ng h tr cho pha thi t k ph n m m. (Nguyn do: Ch dng cc PP
phn tch thi t k v n ch a ...)

Lin h n cc ti p c n t ng t : analysis patterns, design heuristics, process patterns, ...

N i dung
1. D n nh p 2. T ng quan v m u thi t k GoF 3. K th a v a hnh: c s cho cc m u GoF 4. Vi m u GoF tiu bi u v ng d ng 5. Cc ti p c n t ng t

D n nh p
Xu h ng s d ng m u trong cng vi c chuyn mn, trong h c t p:
Cc m u, khun c dng trong cc ngnh cng nghi p khc nhau (in n, c, ...) Cc bi t p m u cho h c sinh, sinh vin Cc m u ch ng trnh Cc m u h ng d n thi t k giao di n v i ng i dng ...

D n nh p
Ngu n g c c a m u thi t k ph n m m
Ngn ng ? m u c a ki n trc s C. Alexander [Alex77]: thi t k nh b ng cch l p rp cc khun m u c s n t ng cho vi c s u t m v s d ng cc m u ph n m m Cc idiom trong l p tr?nh C++ [Cop92]

D n nh p
Thu t 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 - Thu t ng ti ng Vi t...

nh ngh a
nh ngh a m t m u (pattern) ni chung: M t m u l m t c p (v n , l i gi i) c th p d ng trong nhi u tnh hu ng, ng c nh khc nhau. ng bao g m cc b ph n sau:
Tn N i dung v n L i gi i (ph i t ng qut c th dng trong nhi u tnh hu ng) Cc h qu mang l i v v d p d ng

M i m u th

T ng quan v m u thi t k GoF


Ngu n g c l ch s vTc gi
G m 23 m u thi t k c a 4 tc gi : Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides; Cc m u n y cn c g i l m u GoF (Gang of Four)

Finding patterns is much easier than describing them

T ng quan v m u thi t k GoF


Ngu n g c l ch s vTc gi
G m 23 m u thi t k c a 4 tc gi : Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides; Cc m u n y cn c g i l m u GoF (Gang of Four)

Finding patterns is much easier than describing them

T ng quan v m u thi t k GoF


Ngu n g c l ch s vTc gi
Kho ng trong c a b m u n y c ngu n g c t lu n n ti n s c a Erich Gamma. Cc tc gi g p nhau t i 2 h i ngh? OOPSLA91 v OOPSLA92 (Object-Oriented Programming Systems, Languages, and Applications Conference); Sau cng lm vi c so n l i m t b g m 23 m u v trnh by t i h i ngh ECOOP93 (European Conference on Object-Oriented Programming).

C u trc chung

m t m u GoF

Tn v Phn lo i M c ch, nh: m t ng n g n v ma?u B danh Motivation: trnh by m t tnh hu ng c th trong thi t k ph n m m d n n vi c s d ng m u ny gi i quy t v n . Kh n ng ng d ng: g i cc tnh hu ng trong thi t k m c th ng d ng m u n y

C u trc chung

m t m u GoF

C u trc: m t m u b ng cc k hi u hnh th ng dng trong cc ph ng php p.tch/t.k (k hi u OMT, UML, ...) Cc thnh vin: trnh by ngh a c a cc l p/ i t ng tham gia vo m u thi t k v trch nhi m c a chng S c ng tc: cc thnh vin (l p/ i t ng) c a m u c ng tc nh th no th c hi n trch nhi m c a chng Cc h qu mang l i

C u trc chung

m t m u GoF

Ch lin quan n vi c ci t M ngu n minh h a Nu ra nh ng v d v cc h th ng th c t ( c pht tri n v ang ch y) m c s d ng m un y Cc m u lin quan: nh ng m u no c lin h v i m u n y, nh ng i m quan tr ng c n ph i phn bi t; m u n y c th dng ph i h p v i nh ng m u no.

Danh sch 23 m u GoF


CA MA VE O LA LP hay OI T G C U TA P N Te n
Abstract Factory (Fabrique Abstraite) Builder (Monter) Factory Method (Fabrication) Prototype

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

Singleton

CA MA VE U TRU L hay OT G C U CA C P I N Te n
Adapter (adapteur) Bridge (Pont) Composite

Mu ch c
Do va etng thch, thay o interface cu mo l thah mo n i a t p n t interface kha phu p v ye ca ngsdu g l. c h i u u i n p Tah rngngh cu mo va ekho vie caa ; muc ch c i a a t n i c i t ecahai bopha (ngngh vacaa cothethay o o n a i t) i c la nhau. p Toch ca o t g theo ca tru pha ca da g ca; Ta ca c c i n u c n p n y t ca o t g trong ca tru c thao ta theo mo cah thua c i n u c c t c n nha nh nhau. t Ga the trah nhie cho o t g (mrog ch nag) va n m c m i n n c n o lu chay (dynamically). c Cung ca mo interface thua nha cho mo ta h ca p t n t t p p c interface trong mo hethog con (subsystem). t n Sdu g vie chia seethao ta hie quatre mo sol g n c c u n t n l o t g cnho (chag ha paragraph, dog, co, ky n i n n n n t t..) . ie khie mo cah gia tie vie truy xua mo o t g u n t c n p c t t i n thog qua mo o t g u nhie . n t i n c y m

Decorator (Deorateur) c Facade (Faade) Flyweight (Poids mouche) Proxy (Procuration)

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

CA MA VE G X CU LP hay OI T G (2) C U N A N Te n
O bserver (O bservateur) State (Etat) Strategy (Strateie) g Template method (Patron de me thode) Visitor (Visiteur)

Mu ch c
t-nhie gi ca ot g sao cho u a c i ngh s phu thuo mo nh a c n khi mo ot g thay otra g thath ta ca c ot g t i n i n i t ca i n phu thuo no ng thay otheo. c cu i Cho phe thay og xcu ot g tu theo s thay o p i n a i n y i tra g thabe trong cu no n i n a . Bao bo mo ho ca thua toa bag ca l ot g ethua c t c t n n c p i n t toa co thay oo la ovchng trnh s ng thua n the i c p i i du t toa. n ngh pha khung cu mo thua toa, t la t thua toa nh a n a t t n c mo t n tog qua go e mo so n t i n t phng th cha caa trong c c i t l c s vie caa ca phng th u nhie cho ca p ; c i t c c c y m c l keth. p a Cho phe ngh the phe toa mta og le ca p nh a m p n i c n n c pha t a mo ca tru ot g ma ng ca thay oca n cu t u c i n kho n i c l ngh ca tru o p nh a u c .

K th a, a hnh: c s cho m u GoF


n

L y m t v d

n gi n

Cc ph ng th c virtual : Draw(), Area(), Load(), Input()

HINH

TRON

CHUNHAT

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

Cc ph

ng th c thch h p s

c g i ty theo ki u c a

it

ng:

HINH *p; p = new CHUNHAT; p->Input(); // ph ng th c Input c a CHUNHAT s c g i. Cc thao tc t ng qut trn ki u HINH khng nn c cc ch th ph thu c cc l p k th a. void ThaoTac(HINH *p) { // ch s d ng ph ng th c chung. If(p->Load()) { p->Input(); p->Draw(); ... } } ==> KHNG NN p ki u p, ch ng h n thnh TRON, r i g i cc ph th c ring c a l p TRON. ng

Vi m u GoF tiu bi u v ng d ng
Ph n n y s trnh by cc m u tiu bi u sau y: Composite Bridge Template method Observer ng n g n, m t vi m c trong 13 m c c a c u trc m t m i m u s c b qua. Chng ta s quan tm nhi u n ngh a, tnh hu ng c n dng v v d ng d ng.

Mau Composite
Tn: Composite, t m d ch
thu c l p m u c u trc it it ng. ng a h p,

i t ng theo c u trc phn c p d ng cy; T t c cc i t ng trong c u trc c thao tc theo m t cch thu n nh t nh nhau h a th ng l u i t ng ph c h p bao g m nhi u i n gi n h n. V d nh trong hnh v

nh:T ch c cc

Motivation: Cc ng d ng
tr cc t ng sau:

M u composite gi i quy t v n cch t ch c tch h p d li u

n y b ng qui nh sau:

C u trc:

L u tr m ch i n
Ci rcuit 1..* Resistance() CurrentInte nsity()

Sim ple C ircu it

Composite Circuit

Parallel Circuit

Sequential Circuit

Mau Bridge
Tn: Bridge, t m d ch C u n i, thu c l p m u c u trc i t ng. nh:Tch r i ng ngh a c a m t v n kh i
vi c ci t; m c ch v ci t) c th thay c hai b ph n (ng ngh a i c l p nhau.

Motivation: Gi s ph i xy d ng m t l p qu n
l h th ng c a s c a cc h i u hnh khc nhau, ch ng h n cho 3 h : X Window trn Unix, IBMs Presentation Manager (PM), v MS Windows c a Microsoft. Cch lm t nhin l nh ngh a m t l p c s Window v 3 l p khc Xwindow, PMwindow, MSwindow k th a t l p Window nh sau:

Window

xWindow

pmWindo w

msWindo w

Gi s c c n thm l p qu n l cc h p h i tho i Dialog - m t d ng Window c bi t. Nh v y l p Dialog s l c bi t ha c a l p Window (k th a t l p Window). K n l i l 3 l p h i tho i cho 3 h th ng c a s khc nhau k th a t Dialog Window

xWindo w

pmWindo w

msWindo w xDialog

Dialog

pmDialog

msDialog

Mau Bridge
Cch t ch c n y b c l cc khuy t i m nh sau:
B t ti n khi m r ng: b sung h th ng c a s cho m t h i u hnh khc hay thm cc lo i c a s khc (ch ng h n l p cc tool bar hay cc control...). Cc ch ng trnh s d ng h th ng l p n y s ph thu c h i u hnh. Tn cc l p ph thu c h i u hnh b ri kh p trong cy k th a.

Mau Bridge
t ng c a m u bridge l tch bi t hai ph m tr:
ngh a c a cc c a s (Window, Dialog, ToolBar, ...) s ci t ph thu c cc h i u hnh

thnh 2 cy k th a ring bi t v n i nhau b ng m t c u

C u trc:

M u Template method
Tn: Template method, t m d ch Ph
khun, thu c l p m u v ng th c ng x c a l p

nh ngh a ph n khung (ph n b t bi n) c a m t thu t ton, t c l m t thu t ton t ng qut g i n m t s ph ng th c (ph n thay i ty vo ng c nh) ch a c ci t trong l p c s . Vi c ci t c a cc ph ng th c n y c y nhi m cho cc l p k th a. Thu t ton ch y c cho cc l p k th a m c u trc c a thu t ton v n khng thay i.

nh:

C u trc
Ph ng th c khun: ph n khung ci t c u trc chung c a thu t ton

Ph n thay i theo ng ? c nh, vi c ci t c y nhi m cho cc l p k th a

Trong ci t c u trc khung c a thu t ton se? g i n cc ph ng th c c ci t tre?


Ch l ph i khng ci t l i ph ng th c khun TemplateMethod trong l p k th a

M u Template method
C s ci t: d a vo s a hnh cho cc ph ng th c c g i bn trong ph ng th c khun. Xem v d n gi n vi t b ng C++ sau y

OpenDocument() l m t ph th c khun

ng

G i cc ph ng th c ch a ci t S ci t trong l p k th a

void Application::OpenDocument (const char* name) cc p. th c n y Ch r ng { s c ci t l i trong cc if (!CanOpenDocument(name)) l p k th a. Ch ng h n nh { trong l p MyApplication th // cannot handle this document p.th c DoCreateDocument return; tr v m t i t ng ki u } MyDocument. Nh v y, Document* doc = DoCreateDocument(); i t ng doc c ki u l if (doc != NULL) MyDocument v l nh g i { doc->DoRead s g i _docs->AddDocument(doc); ph ng th c DoRead c a AboutToOpenDocument(doc); l p MyDocument. doc->Open(); doc->DoRead(); } }

V d : Thu t 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(); }; class PrimSpanningTree: public SpanningTree{ int search_Arc(ARC& e, int& x, int& y) { // to find the minimum arc.. // ... return 1; }; };

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

M u Adapter
M c ch: thay giao ti p c a m t l p b i m t giao ti p khc ph h p v i yu c u ng i s d ng l p, nh m gi i quy t bi ton t ng thch. C u trc c a m u Adapter: c 2 d ng
Multiple composition Object composition

Adapter structure (Multiple inheritance)

Adapter structure (Object composition)

p d ng: cc control c a MFC

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

p_Rubrique 1 CWnd

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

RhodesListWidget

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

RhodesListCtrl
RhodesListBox( ) { p_Rubrique = new CListBox ; }
CListBox *p_ListBox=(CListBox *) p_Rubrique ; int idx = p_ListBox GetCurSel( ); if (idx>=0 && idx< p_ListBox GetCount( )) p_ListBox GetText(idx, ElementCourantTexte);

RhodesComoBox

M u Observer
Tn: Observer, t m d ch Quan st vin, thu c l p
m uv ng x c a it ng i c

nh: nh ngh a quan h ph thu c m t-nhi u

gi a cc i t ng. Khi m t i t ng thay tr ng thi, t t c cc i t ng ph thu c thng bo v c p nh t tr ng thi.

Motivation: Trong cc ph n m m c giao di n


h a v i ng i s d ng, thng th ng c nhi u bi u di n h a khc nhau cho cng m t l d li u, khi d li u thay i th t t c cc bi u di n h a ph i c c p nh t

Hnh v sau minh h a tr (Excel, Lotus 1-2-3..):


OBSERVER

ng h p c a cc b ng tnh i n t

C u trc

M u proxy
M c ch: Truy xu t m t
m t it ng it c y nhi m ng thng qua

Dng trong cc tr

ng h p

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

M u 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.

M u prototype: v d

Mau prototype: code example class Staff : public Graphic { struct Mapping {
public: Staff(); Staff(const Staff&); virtual Staff* Clone(); ... }; Staff::Staff (const Staff& other) { // copying members... } Staff* Staff::Clone () { return new Staff(*this); } 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; }

M u strategy
M c ch: bao b c m t h cc thu t ton b ng
cc l p i t ng thu t ton khi c n ng d ng c th ch n l a

M u strategy: v d
Sort Testing sortAlgorithm() +alg Sort Algorithm()

... alg->Algorithm()

SelectionSort Algorithm()

QuickSort Algorithm()

InsertionSort Algorithm()

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

M u state
M c ch: cho php thay i ng x c a i t ng ty theo s thay i tr ng thi bn trong c a n M u n y r t gi ng v i m u strategy v m t hnh th c, tuy nhin khc v ngh a

M u state: v d

Cc ti p c n t
Design patterns [Gam95] GRASP pattern [Lar98] Analysis patterns [Fow97] Process patterns [Amb99]

ng t

Cc ti p c n dng l i theo ki u pattern:

Cc kinh nghi m ph ng php lu n nh h ng cho qu trnh thi t k


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

Cc ti p c n t

ng t

Vi c h tr dng l i cho qu trnh pht tri n ph n m m


Frameworks Software components

Design heuristics
Khi ni m: M i heuristic thi t k l m t h ng d n sc tch v m t ph ng php lu n cho m t v n nh trong thi t k ph n m m. Ngu n g c: T. gi Arthur J. Riel [Rie96] thu th p v h th ng ha 61 heuristic lin quan n thi t k ph n m m h ng i t ng. M s c a cc heuristic sau y cl y theo ti li u g c c a tc gia

Vi heuristic chung v l p v
Heuristic 2.1: D li u c a l p nn

it

ng

c che d u bn trong l p (Vi c thao tc d li u c a l p nn th c hi n gin ti p qua cc ph ng th c)

Heuristic 2.7: M t l p ch nn dng cc

ph ng th c, cc php ton trong ph n giao ti p Public c a l p khc. H qu : gi m s coupling gi a cc l p. Nh v y khng nn dng c ch friend nh c a C++ truy xu t vo cc ph n ci t bn trong l p khc.

Heuristic 2.5: Khng nn trnh by ci t chi ti t c a cc ph ng th c khc nhau c o n m ngu n gi ng nhau trong giao ti p Public c a l p
X private Nn chuy n 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 l p k th a ph i c tri th c


v l p c s c a chng (do quan h k th a), nh ng l p c s khng nn bi t b t k i u g v l p k th a c a n. L do: V n u l p c s c ch a tri th c v cc l p k th a th khi c thm l p k th a m i t l p c s , m ngu n c a l p c s c kh n ng b thay i.
A

A khng nn bi t thng tin g v B, n u A c tri th c v B th A s m t tnh t ng qut

Vi heuristic chung
Heuristic 5.4 v 5.5: V m t l thuy t, s
phn c p cc l p k th a cng m n (nhi u t ng) cng t t. V m t th c hnh, s t ng phn c p khng nn v t qu m t s trung bnh m m t ng i thng th ng c th theo di t t cc l p trong cy k th a. Con s trung bnh ny khng nn v t qu 6 t ng.

Heuristic 5.8: Cc thu c tnh v ph

ng th c chung cho nhi u l p nn t ng cao nh t c th c trong phn c p k th a.

Heuristic 5.9 v 5.10:


N u hai hay nhi u l p ch chia s chung ph n d li u (khng c ph ng th c chung) th ph n d li u chung nn l m t thu c tnh c ki u l m t l p m i bao b c ph n d li u chung . N u hai hay nhi u l p chia s chung d li u v cc ph ng th c th cc l p nn k th a t m t l p c s chung m bao g m d li u v cc ph ng th c .

Heuristic 5.12: Khng nn dng k thu t ki m


tra ki u c a i t ng. Trong h u h t cc tr ng h p, c th dng a hnh gi i quy t v n
Type do_this()

if x is of type 1 then do this else if x is of type 2 then do this else if ...

Nn chuy n thnh

Type 1 do_this()

Type2 do_this( )

... ...

Heuristic 5.13:Tr

ng h p c n ki m tra gi tr thu c tnh c a i t ng c a l p th c hi n cc ng x hon ton khc nhau th l p nn phn r thnh nhi u l p, m i gi tr c a thu c tnh s l m t l p k th a t l p c s .

Heuristic 5.14: Khng chuy n cc

i t ng c a m t l p thnh cc l p k th a, ph i c n th n b i v nhi u khi l p k th a ch l m t th hi n (m t i t ng) c a l p c s .

You might also like