You are on page 1of 45

D

D<
< I
I:

DE
DE!IIGN
GN
PA" "EN!
I2018-1.1

DEMO VERSION
A F= %+  C?/:
"<! 'L @ <F AK IGF. #Q@
G HG  G > D(5$ I3 D$-
2(& P33$2    G
G  
<
<
 H
HF
F

D(5$ I3 R$%"3(& .

<F > <F  LH F HF L.


*F QG F <G J<G L G<
G<F KG LH @<L @@F. # LHQ <> G F G

> J<G<G
  <<

  
H
H
, HL  F
 G
@@ 
J L.

A WG @ G F  @L >F  HFF <F FG 
G I@G  R$%"3(&.G44. E L F F G
=G <@@FL  <F G @@G   J > -
F  <GG <G F.

  AK IGF, +G<.HH, 2018


 243@$%"3(&.&44

  #HFGG<F: D@<GL G


 E<G<: AJ G@,
G@, +L @
I ()('%8) 87 & 8 1= ;*), M%6%. I* 8 
%(2@8 &))2 *6 )6,
)6, I@( 46&%&= %) 27)( 
8)
8) &
&
 7
71)
1) 30 =)%
)%67
67 %
%8)
8)6.
6.
4 

  C
G
GG
GFF

"() - C::
"() - C:
C::
: ...............................................................................
.......................................................................................
........ 4

H= : (+ "/ B


B..............................................................................
.............................................................................. 6

IN"OD#C"ION "O OOP ............................................................................. 7


BF<F  * ...................
......................................
......................................
......................................
..........................
....... 8
*<F  * ...................
......................................
......................................
......................................
........................
.....13
13
+G<F BGJ
BGJ
 =GF
=GF...................
......................................
.....................................20
..................20

IN"OD#C"ION "O DE!IGN PA""EN!.................................................23


GQFF  DF< *GG?..................
GQ *GG? .....................................
......................................
.......................
....24
24
L H # & *GGF?
*GGF? ...................
......................................
................................28
.............28

!OF"%AE DE!IGN PINCIPLE!...........................................................29


GHF  
 DF< ..................
.....................................
......................................
.......................
....30
30
D P*.............................................................................34
N EFHG
EFHG G <F
<F ...................
......................................
............................35
.........35
N *@ G  #G, G  #@@GG<.39
N I C@F<G<
C@F<G< I
I #<G
#<G .................
........................44
.......44
!OLID P*..............................................................................48
N < +FF<<<GL
+FF<<<GL *
*<<......................
<<....................................49
..............49
N /CF
/CF *<<................
<<...................................
....................................51
.................51
N &<F>I HFG<GHG< *<<
*<< .................
....................................
......................54
...54
N #G G< *<<...................................61
N DL #IF<
#IF< *<<
*<< ................
.................................64
.................64
5 

  C
G
GG
GFF

CA"ALOG OF DE!IGN PA""EN!............................................................68


C(:( D P(::...........................................................69
N GL 'G..................
'G .....................................
......................................
............................
.........71
71
N AFGG GL..............................................
GL................................................................87
..................87
N BH<.................................
 BH<....................................................
......................................
...........................
........ 103
N *GGL
GGL .................
....................................
......................................
......................................
................... 122
N <G
 <G
 .................
....................................
......................................
......................................
................... 136
!:;*:;( D P(::..........
P(::...............
...........
............
...........
...........
............
...........
...........
........ 145
N AG ...................
......................................
......................................
......................................
..................... 148
N B<
B<..................
.....................................
......................................
......................................
........................
..... 161
N C
 C@F<G
@F<G...................
......................................
......................................
..................................
............... 176
N D
DG...........
G..............................
......................................
......................................
.........................
...... 190
N 
 
.................
....................................
......................................
......................................
........................
..... 208
N LJ<
LJ<GG ...................
......................................
......................................
...................................
................ 218
N *
 *KL
KL...................
......................................
......................................
......................................
.........................
...... 232
B/(<(
B/(<( D P(:: ......
............
...........
...........
............
...........
...........
............
............
.........
... 244
N C<  +FF<<<
+FF<<<GL GL ..................
.....................................
.............................
.......... 248
N C
 C@@
@@...................
......................................
......................................
...................................
................ 266
N #GG
#GG ...................
......................................
......................................
......................................
....................... 287
N '<G
'<G
 .................
....................................
......................................
......................................
..................... 301
N '@G .................
....................................
......................................
......................................
................... 317
N FI .................
....................................
......................................
......................................
..................... 333
N GG
 GG................
...................................
......................................
......................................
.............................
.......... 349
N GG
GGL
L ..................
.....................................
......................................
......................................
..................... 365
N 
 @G
@G 'G
'G ...................
......................................
......................................
..................... 378
N <F<G ..................
.....................................
......................................
......................................
........................
..... 390

C*; .....
C*; ...........
............
...........
...........
............
...........
...........
............
............
............
...........
...........
............
...........
...........
.........
... 406
6 "J
"J G 

 G
G<F
<F 
>
>

H= : (+ "/ B


<F > G<F G F<G<F  22 FF< F< G-
GF @HG L G R  HS ( F<@L ) < 1994.

E G KF  G<H


 G<H GG. , LH 
 @ I G I  L <>< G GGF LHQ <-
GFG <.

'L GGF  G, F LH  F<L =H@ @ G<
G G< HF< H@HF F.     G F
 <FG  <>F GJ G HG GG  GF. # LH
F G @   GG GG LH IQG F LG, =HFG >
<OG<F <G@ J<  <   G KG GF.

DF< GGF  H<IF. ,   F@F <


G<F >  J<GG < FH GG FQG FG< G
@G< G  G<H @@< H.

*< G FGHL< GGF, LH  F LH @@L L


< I G *$8 3$,2 % !)$"3-($3$# &,,(& .
G G F K<F
K<F G F<F  '& <@F, J<
<F HFH HF G > F GF  G@.  HF, < LH
L >J   GG, LH  

 G +$
+$(
(&
& 3
33$
3$2
2
<G JL.
IN"OD#C"ION
"O OOP
8 #GH
#GHG<
G<
 G * / BF
BF<F
<F  *

B(* - OOP
&)'8-o6)28)(  p6+6%112+  <F  <@ F  G -
O &)'8-
G  J< <F  G,  I< G G GG
G, <G F< HF  !)$"32, J<  FGHG-
 @  FG  RH<GFS, W L  @@, 
"+22$2.

O)*:, *(

D LH <> GF? #  LH  HF #Q GL G K< G
* GF HF< I<HF G K@F.

T7 7 % ML '%77 (%+6%1.


(%+6%1. $9@
$9@ 7)) % 8 * 79' (%+6%17
(%+6%17 2 8) &.
9 #GH
#GHG<
G<
 G * / BF
BF<F
<F  *

L LH I  G @ F.


F. F <F  =G,
=G ,  <FG
 G Cat F FF.
F. EIL G F  G  FG
FG GG<HG
GG<HGF:
F:
@, FK, , J<G, , I<G , G. F  G
FFQF  )(7.

A GF F I F<@<L: GL G, G, H, F 
@J. F  G FFQF 1)8(7. CG<IL, WF 
@GF    F G 1)1&)67  G< FF.

DG FG <F< G =GQF WF <F G 


F 78%8),   G =GQF @GF W <GF &)%6 .

O&)'87
O&)'87 %6) 278%2')
278%2')77 * '%77
'%77)7.
)7.
10 #GH
#GHG<
G<
 G * / BF
BF<F
<F  *

&H, LH <QF G, <F F  <FG  G Cat   FF.
#G F G F@ FG  GG<HGF F F.  < <F <
IHF  GF GG<HGF:  FK <F @, F F  <-
G ,  J<F FF.

  '%77 <F <>  H<G GG WF G FGHGH  &-


 )'87, J<  G <FGF  GG FF.

C( /(*/

EILG< W  L J J G> HG  FF. G-
EILG<
HL,   @ G<F @ G  F< FF. @
 GF FFF @<G  <M <G "+
"+22
22 '($
'($
"'($2. &GQF
"'($2
W HG JG GG @F.

L LH < F    <. #G GHF HG, F 
GF I  G < @@: @, FK, ,    G-
G<HGF  G F  GF. DF  G, F 
H G F@ JL GF .  <G F@F GG J  W G
F   Animal FF GG JH
JH <FG G @@
@@ GG<HGF 
I<F.

A G FF, <> G  JQI =HFG W, <F   24-
$"+22. #GF <  24!"+22$2. HFFF <<G FGG
 I< @ G< G, W< L GG<HGF  -
I<F GG <. HF, G Cat FF JH
JH I
I G
G   meow
@G,  G Dog  FF G   bark   @G.
11 #GH
#GHG<
G<
 G * / BF
BF<F
<F  *

ML (%+6%1 * % '%77 )6%6'=. A '%77)7 2 87 (%+6%1 %6) 4%68 * 
8)   Animal '%
'%77
77 )
)6%6
6%6'=
'=..

AFFH@< GG J I  G HF<FF H<@G, J 


 I HG  KGG  @  FF   <I-
<   Organisms J< J< @
@  FHFF
FHFF    Animals
   Plants  . H  L@<  FFF <F  '($"'8 . # FH
 <L, G Cat FF <<GF ILG<
ILG< @ G G
Animal    Organism   FFF.
12 #GH
#GHG<
G<
 G * / BF
BF<F
<F  *

C%77)7 2 % ML (%+6%1 '%2 &) 714)( * 8@7 16) 1468%28 8 7; 
8)6 6)%82
6)%8277 8%2 8)6 '2
'28)287
8)287..

HFFF  I< G I<  @GF GG GL


<<G @ G FFF. A FHFF  <G @G-
L  G HG I<  =HFG  <G J<G F@
KG FGH.
16 pages

from the full book are omitted in the demo version


!OF " %A
!OF" AEE DE!IGN
PINCIPLE!
30 G
GH
HF
F  

 D
DF<
F<


F(:;
F(:; - G+ D
B J  G G GH GGF, GQF <FHFF G
FF  F<< FGJ <GGH: G<F G <@ 
 G<F LHQ GG I<.

 C+ ;
CFG  G<@  GJ  G @FG IH @G<F J
I< L FGJ HG. &FF G<@ < I@G
@F G< G @>G
@ >G < G @G<GF. &J -
I@G FGF @ @ @L <F G  @>G<  
  G GG< HFG@F.

C#
#$
$ $
$42$ <F   G @FG @@ JLF G H I-
42$
@G FGF.  <GG <F GGL I<HF: <FG  I-
< F@G< I  I @ FG, JL QG J HF
K<FG<  < J =GF?

 < >F G  , HG <G GHF HG GG @>< K-
<FG<  J> <  J GKG HFHL G>F KG G.
<G H< GJ @GF, <F  -
G FFF <FG  <GF,  G<FO
 G<F HF XK<<<GL  G   @>F <G  G
HF <G.

F< F< GGF <F  JL G <F XK<<<GL  FG-


J @GF  @> G@ F< G HF. "JI,
31 GH
GHF
F  

 DF
DF<
< / C
C
 H
HF
F

G<F F@G<@F @F G G <  @>< G @GF


@ @<G.

"QF  <  J<F@ @ E< @@ 1,   G


H< GF  F< GGF, HG G   F<
GGF <  HF:

R # F G IF  HF.

AG G JFG I, LH HF FFF: FF <<F, G<-


F, @L F@ FF RG@FS <> G</<GG.
G</<GG.

@J>F  G G <FG I. L L GL G <FG<


LH F< <F<F. L <G<L G >L FGG<F 
FI<  @, FG G@ L FFF  W -
G<F<F GJ G@. $<G <F  F@ @J>,  K-
@. #G <F G R", JS  @J>F. #G F   Test ,
TestCase ,   TestSuite  G<F<F W.

A @J> <F GL<L -< G =HFG  F< FF.


AF, LH > <G @J>F L FHFF< F@J.
L HF G F- "LJ <<  RQG  HF,
JQ  LH.S  @J> GF LH W LH HFG@ -
I<,,  <G J<  LH J <GQ
I< <GQFF LH GH G  F@G<.
@ J<G $<G, <G? #G F LH J <G JGF G KHG 
GFG  LH, HG G FG F < G @J>.

1. E< @@
@@  K
K<<
<<<GL
<GL  +HF: '332://$%"3(&.&44/ 
&,,-(3$5($6 
32 GH
GHF
F  

 DF
DF<
< / EKG
EKGF
F<<
<<<GL
<GL

 F <F  @< I. <F <F J # F GGF. D-
F< GGF  G F@  @ FGG G @-
J>F. LQ L  F<G< HG J  H  
FFF  G G  <GG J<G  G.  I  
HF <FF J LH @I @ FFF G GGF 
WL @J>F.

G <F < HG G<F @< L <F GG GGF 
HF <  JL GG <F FF <F>L G @J>F. BH<< 
@J> <F <-<F>   F<<WG <IFG@G. *GGF
G LH HF F< <F  GF <GL  -
G .

T
 E>:):?
C'&$ <F G L FGG G< <  @@QF <.

U H 
F
F
  I<
I<
 @
@ 
 <
<J
JF,
F, HG
HG J
J 

 F>
F>
  @ IF<.
U H 
G
G  # @
@J
J>
> J<G
J<G
 FH
FH
 HGG
HGGF,
F, HG FI
FI

@GF G H HGGF @  G.
U H F<
F<
  <
<<
<GG -
-@@
@@
 J
JF<G
F<G
 
<G
<GGH
GH,
, HG
=HFG  @G G HFG@F F>   GH GG JH G
G@ G  F.

E FGJ I F MF  F<@< FG<F. 


 FI FF JL G<F F.
33 GH
GHF
F  

 DF
DF<
< / EKG
EKGF
F<<
<<<GL
<GL

<FG, J HFG G @ GG  J FGG G FI


<G. G L G G<@ LH W<F G WFG IF<   ,
LHQ L G J<G <G @ FG HF J LH H-
FG @L FGF  G @ @H GG. H I F
J FF<L,  LH J  J >F <> .

@G< L LH G F . <F <F JL F


@L I G@F <IG @ G< << <F <G F@G<
J. EIL J <  F <  < <G<
F  J><  @<G< G<  F JF G
JF F FHG  F.

 G< F <F GG G FGF @I. H <G JF
<G J<G G HG IF<  G <G
<G<,
<, HG J
FF I R<GGS F Q <> F <G   G G<F
 I @G< < G << < FFF<F. F
QG <IHF F: LH KG WFG IF< F FJ
<@ GG I @ <F FF<.

QF  <G F<: < F@ F>F LH G 


F@G< < LH , GG @F F@ FG< F
HG <G.

GQF JL  FF IF


GQF IF GL G I<  FF<
HGH F J F<<  <G<QF <GGH.
34 DF<
DF<
 *<
<<
<
F
F

D P*
G <F  FGJ F<? "J JH LH @FH <G?
G G<F JH LH  G J G <I <G? "J
 LH @> LH <GGH XK<, FG  FL G H-
FG?

F  G G HFG<F; HG, HGHGL, G FJF


 <G <
 <  G GL  <G< LHQ
LHQ
 H<-
<. IGFF,
IGFF , G  FI H<IF <<F  FG-
J F< GG @<G  LH FJ GF HFG<F 
LH J =G. 'FG  G F< GGF <FG < G<F
>  F  GF <<F.
35 DF<
DF< *
*<<
<<FF / EF
EFHG
HG G 
<F
<F

E*(;(: %/(: $(


#G<L G FGF  LH <G< GG IL 
FG G@ @ JG FGLF G F@.

 @<   G<F << <F G @<<@<M G G HF
L F.

#@< GG LH @ <F  F<,  F  <HF
@<
@<FF G
GG
G <
<

 H
H
 J
JGG
.. G
GH
H>
> L G
G
 @<
@<
,, G
G

F< F<>F.

%J< G<F, LH  <I< G F<QF H <G <G
@G@GF GG   FL F G <@<G @ G 
F< @G@G. J, < G F< <GF  @<, G F< F 
J @<F XG.

# G F@ JL, LH  <FG G GF  G @ GG
IL < <G @HF, GG< G FG  G 
@ IF GF. AF  FHG, LH F FF G<@ GG<
G @ > <G J>< F, <@@G<
<@@G<   GFG-
< G F.  FF G<@ LH F @>< F, G
@ G<@ LH I  <@@G< GHF.
36 DF<
DF< *
*<<
<<FF / EF
EFHG
HG G 
<F
<F

E*(;(:  ( :/+ <

L LHQ @><  -@@ JF<G. @J < <  LH


, GQF    getOrderTotal @G GG HGF  
GG  G , <H< GKF.

  G<<G GG GK-G  @<G  G 


< G HGH.  GK G F  G HGL, FGG 
I <GL J G HFG@ F<F,  G GH @H
@L  I G<@ H G J JF  HG<F. AF  -
FHG, LHQ  G  G   getOrderTotal   @G H<G
G. BHG I G @GQF @ FHFGF GG <G FQG
 HG ;  G
 G GK <F HG.

1 method   getOrderTotal(
getOrderTotal (order
order)) is
2 tota
total
l = 0
3 foreach   item
item in orde
order.li
r.lineIt
neItems
ems
4 total
total += ite
item.p
m.pric
rice
e * ite
item.q
m.quan
uantit
tity
y
5
6 if (orde
order.co
r.country
untry ==   "US")
"US")
7 tota
total
l += to
tota
tal
l * 0.
0.07
07   // US sal
ales
es tax
8 else
else if (orde
order.co
r.countr
untry
y ==   "EU")
"EU"):
9 tota
total
l += to
tota
tal
l * 0.
0.20
20   // Eu
Euro
rope
pean
an VA
VAT
T
10
11 return   total

BEFORE: 8%< '%'9%82


'%'9%82 '() 7 1<)(
1<)( ;8 8) 6)78 * 8) 1)8(@7 '().

H 

 KG
KG
G
G G
G G
GK
K 

H
HG
G<
<
 
<
< <
<G
G  F
F

G
G
@G, << <G @ G << @G.
37 DF<
DF< *
*<<
<<FF / EF
EFHG
HG G 
<F
<F

1 method   getOrderTotal(
getOrderTotal (order
order)) is
2 tota
total
l = 0
3 foreach   item
item in orde
order.li
r.lineIt
neItems
ems
4 total
total += ite
item.p
m.pric
rice
e * ite
item.q
m.quan
uantit
tity
y
5
6 tota
total
l += to
tota
tal
l * ge
getT
tTax
axRa
Rate
te((order.country
order.country))
7
8 return   total
9
10 method   getTaxRate(
getTaxRate (country
country)) is
11 if (cou
countr
ntry
y ==   "US")
"US")
12 return   0.07   // US sal
ale
es ta
tax
x
13 else
else if (cou
countr
ntry
y ==   "EU")
"EU"):
14 return   0.20   // Eu
Euro
rope
pean
an VA
VAT
T
15 else
16 return 0

 AFTER: =9 '%2


'%2 +)8 8) 8%< 6%8) &= '%2+
'%2+ % ()7+2%8)(
()7+2%8)( 1)8(.

K-G F @ <FG <F<  F< @G.


'I, < G GK HG< < @F G @<G-
, <GQF J F< G @I <G G  FG FF.

E*(;(:  ( *( <

I G<@ LH @<G  @  @ FF<<<G<F G


 @G J< HF G   F<@ G<. F  -
I<F G @ J<G G< J  WF  @GF
GG IGHL H G <@L FF<<<GL  G G<-
< FF. EKGG< ILG< G  J FF @<G @>
G<F @H @   F<@.
38 DF<
DF< *
*<<
<<FF / EF
EFHG
HG G 
<F
<F

BEFORE: '%'9%82+ 8%< 2   Order '%77.

=GF  G   Order FF G


G  GK-G
GK-G J>
J> G 
F< =G GG F =HFG GG.

 AFTER: 8%< '%'9%82


'%'9%82 7 (()2 *61 8) 6()6 '%77.
29 pages

from the full book are omitted in the demo version


CA"ALOG OF
DE!IGN
DE! IGN PA
PA" "EN!
69 CG
CG<
< DF
DF<
< *GG
GG
FF

C(:( D P(::


CG< GGF I< I<HF =G G< @-
<F@F, J< <F XK<<<GL  HF  K<FG< .

F(*:?
M:/+
*I<F  <G  G< =GF <  FHFF, HG -
*I<F
JF FHFFF G G G GL  =GF GG J<  G.

A):(*:
F(*:?
&GF LH H @<<F  G =GF J<GHG F<L<
G< G FFF.
70 CG
CG<
< DF
DF<
< *GG
GG
FF

B;+
&GF LH FGHG @K =GF FG L FG.  GG -
JF LH G H <G GLF  FGG<F   -
=G HF< G F@ FGHG< .

P::?
&GF LH L K<FG< =GF J<GHG @>< LH  -
G  G< FFF.

!:
&GF LH FH GG  FF F L  <FG, J< I<-
<   FF <G G G<F <FG.
71 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

FAC"O' ME"HOD
 A7 2;2 %7: !689% C27869'86 

F"3
F"3
8
8 M$
M$3'#  <F  G< F< GG GG I<F
3'#
 <G  G< =GF <  FHFF, HG JF
FHFFF G G G GL  =GF GG J<  G.
72 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

 P)
#@< GG LHQ G<  <FG<F @@G <-
G<.  WFG IF<  LH   L  GF-
GG< L GH>F, F G H>  LH  <IF <F< G
Truck   FF.

AG  J<, LH  @F GGL H. E L LH
<I MF  HFGF @ F GFGG< @<F
G <G F <FG<F <G G .

 A((2+ % 2); '%77


'%77 8 8) 46+6%1 72@8 8%8 714) * 8) 6)78 * 8) '()
'()
7 %6)%(=
%6)%(= '94)(
'94)( 8 )<782+
)<782+ '%77)7.

G JF, <G? BHG J HG G ? AG FG, @FG  
LH  <F H G G   Truck   FF. A<   Ships   <G
G  JH H< @>< F G G G< F.
'I,, < G LH < G  G GL  GF
'I G FG-
G-
G< G G , LH J< L  G @>   GF
F <.
73 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

AF  FHG, LH J<  H J<G GGL


G GL FGL , < J<G
<G<F GG FJ<G G QF I< <  G
FF  GFGG< =GF.

 !;:
 GL 'G GG FHFGF GG LH  <G
=G FGHG< F (HF< G new  G) J<G F
G  F<  *%'86=  @G.
  @G. DQG JL: G =GF  FG<
G I< G new G, HG <GQF
<GQF <  @ J<G<
G GL @G. =GF GH L  GL @G 
G  G F RHGF.
HGF.SS

S9&'%77)7 '%2 %8)6 8) '%77 * &)'87 &)2+ 6)8962)( &= 8)
 *%'86= 1)8(.

AG WFG , G<F  @L > <GFF: J =HFG @I


G FGHG  @  G  G @ G G-
. "JI, F< G<F: J LH  I< G GL
@G <  FHFF   G FF  HGF <
G L G @G.
74 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

QF  F<G <@<GG< GH: FHFFF @L GH <-


G GLF  HGF L < GF HGF I  @@
F FF  <G. AF, G GL @G < G F
FF FH I <GF GH GL  F G<F <G.

 A 46(9'87 1978 *; 8) 7%1) 28)6*%').

 K@, G   Truck    Ship   FFF FH <@-


@G
@ G G
G
   Transport <G<G

,
, J
J<
< 

F
F  @G
@G

   deliver  . E FF <@@GF G<F @G <G-
L: GH>F <I  L , F<F <I  L F. 
GL @G < G   RoadLogistics FF GHF
GHF GH>
GH> -
=GF, JF G GL @G < G   SeaLogistics   FF
GHF F<F.

  GG HFF G GL @G (G  G ')28 
) FQG F  < GJ G GH HGF -
GH L I<HF FHFFF.  <G GGF  G HGF
F FGG   Transport .
75 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

 A7 2+ %7 % 46(9'8


46(9'8 '%77)7 14)1)28 % '112
'112 28)6*%'),
28)6*%'), =9 '%2
'%2 4%77
8)6 &)'87 8 8) ')28 '() ;898 &6)%2+
&6)%2+ 8.

 <G >JF GG  GFG =GF  FHF G


I G   deliver @G, HG KGL
KGL J
J <G J>F <FQG
<FQG <@-
GG G G <G.

 !:;*:;
76 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

1.  P#4"3 F G <G, J< <F @@ G  -


=GF GG   H L G G  <GF FHFFF.

2. C"
"$3
$3$
$ P#4"322   <G <@@GG<F  G -
#4"3
HG <G.

3.  C$3   FF F G GL @G GG GHF


J HG =GF. #GQF <@GG GG G GH GL  G<F
@G @GF G HG <G.

H   G GL @G


@ G F FGG G   FH-
FFF G <@@G G< J IF<F  G @G. AF 
GG<I, G F GL @G  GH F@ HG
HG GL.

G, F<G <GF @, HG G< <F 3 G <@L -
FF<<<GL  G G. FHL, G G FF L
F F@  HF<FF < G G HGF.  GL
@G F G H G<F < @ G G -
HG FFF. " <F  L:   FGJ I@G
@L  I  G<< G@G  @@F.
"JI, G <@L HG<  G @L F  J <F
FG< J<G< , G H< @@F.

4. C"
"$3
$3$
$ C$
C$32  I< G F GL @G F <G -
32
GHF  <G GL  HG.
77 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

G GG G GL @G FQG I G "$3$  J <-
FGF  G G<@. #G  F GH K<FG< =GF @ 
,  =G ,  G FH.

 P;+*+
<F K@ <HFGGF J G F F"3
"3
8
8 M$
M$3'#   HF
3'#
 G< FF-G@ # @GF J<GHG H< G
<G  G G # FFF.

 F < FF HFF <G # @GF G  <GF


J<J..  I<HF G< FLFG@F,
J<J FLF G@F, GF @GF
@G F @L
>  <GG <G <G, HG GL FH FG< I F<F-
GGL. A HGG < <JF <F FG<  HGG < &<HK.

T) '677-4%8*
'677-4%8*61
61 (%+ )<
)<%14
%14).
).
78 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

 G GL @G @F <G L, LH QG  G
J<G G <  G <   G< FLFG@. # 
J   GL @G GG HF HGGF <F< G
F < FF, J  G G  < FHFF GG
GHF <JF-FGL
<JF-FGL HGGF @ G GL @G. 
FHFF G <<GF @FG  G <QF  @ G F
FF, HG, G>F G G GL @G,   <JF-
>< HGGF  G F.

 G<F GG G J>, G F < FF @HFG J> J<G
FGG HGGF:  F FF   <G GG  G
HGGF J. <F JL G <QF  @<F HG<,
J<I GL  HGGF <G J>F J<G.

 HF, LH  L G<F  G G # @GF F


J. "JI, J<G  J GL @G LH  G G
<, LH G F G G A!2
A!23
3"3
"3 F"
F"38  GG.
 GG.  G,
38 
JQ G> HG G<F GG G.

1 // Th
The
e cr
crea
eato
tor
r cl
clas
ass
s de
decl
clar
ares
es th
the
e fa
fact
ctor
ory
y me
meth
thod
od th
that
at mu
must
st
2 // re
retu
turn
rn an ob
obje
ject
ct of a pr
prod
oduc
uct
t cl
clas
ass.
s. Th
The
e cr
crea
eato
tor'
r's
s su
subc
bcla
lass
sses
es
3 // us
usua
uall
lly
y pr
prov
ovid
ide
e th
the
e im
impl
plem
emen
enta
tati
tion
on of th
this
is me
meth
thod
od.
.
4 class   Dialog is
5 // Th
The
e cr
crea
eato
tor
r ma
may
y al
also
so pr
prov
ovid
ide
e so
some
me de
defa
faul
ult
t im
impl
plem
emen
enta
tati
tion
on
6 // of th
the
e fa
fact
ctor
ory
y me
meth
thod
od.
.
7 abstract
abstract method
method   createButton()
createButton ()
8
9 // No
Note
te th
that
at,
, de
desp
spit
ite
e it
its
s na
name
me,
, th
the
e cr
crea
eato
tor'
r's
s pr
prim
imar
ary
y
10 // res
respon
ponsib
sibili
ility
ty isn
isn't
't cre
creati
ating
ng pro
produc
ducts.
ts. It usu
usuall
ally
y
79 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

11 // co
cont
ntai
ains
ns so
some
me co
core
re bu
busi
sine
ness
ss lo
logi
gic
c th
that
at re
reli
lies
es on pr
prod
oduc
uct
t
12 // ob
obje
ject
cts
s re
retu
turn
rned
ed by th
the
e fa
fact
ctor
ory
y me
meth
thod
od.
. Su
Subc
bcla
lass
sses
es ca
can
n
13 // in
indi
dire
rect
ctly
ly ch
chan
ange
ge th
that
at bu
busi
sine
ness
ss lo
logi
gic
c by ov
over
erri
ridi
ding
ng th
the
e
14 // fa
fact
ctor
ory
y me
meth
thod
od an
and
d re
retu
turn
rnin
ing
g a di
diff
ffer
eren
ent
t ty
type
pe of pr
prod
oduc
uct
t
15 // fr
from
om it
it.
.
16 method   renderWindow()
renderWindow () is
17 // Ca
Call
ll th
the
e fa
fact
ctor
ory
y me
meth
thod
od to cr
crea
eate
te a pr
prod
oduc
uct
t ob
obje
ject
ct.
.
18 Button
Button okB
okButt
utton
on = cre
create
ateBut
Button
ton()
()
19 // No
Now
w us
use
e th
the
e pr
prod
oduc
uct.
t.
20 okButton.onClick(
okButton.onClick (closeDialog
closeDialog))
21 okButton.render()
okButton.render()
22
23
24 // Co
Conc
ncre
rete
te cr
crea
eato
tors
rs ov
over
erri
ride
de th
the
e fa
fact
ctor
ory
y me
meth
thod
od to ch
chan
ange
ge th
the
e
25 // res
result
ulting
ing pro
produc
duct's
t's typ
type.
e.
26 class   WindowsDialog   extends   Dialog is
27 method   createButton()
createButton () is
28 return
return new   WindowsButton()
WindowsButton ()
29
30 class   WebDialog   extends   Dialog is
31 method   createButton()
createButton () is
32 return
return new   HTMLButton()
HTMLButton ()
33
34
35 // Th
The
e pr
prod
oduc
uct
t in
inte
terf
rfac
ace
e de
decl
clar
ares
es th
the
e op
oper
erat
atio
ions
ns th
that
at al
all
l
36 // con
concre
crete
te pro
produc
ducts
ts mus
must
t imp
implem
lement
ent.
.
37 interface   Button is
38 method   render()
render()
39 method   onClick(
onClick(f)
40
41 // Con
Concre
crete
te pro
produc
ducts
ts pro
provid
vide
e var
variou
ious
s imp
implem
lement
entati
ations
ons of the
42 // pro
produc
duct
t int
interf
erface
ace.
.
80 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

43 class   WindowsButton   implements   Button is


44 method   render(
render(a, b) is
45 // Re
Rend
nder
er a bu
butt
tton
on in Wi
Wind
ndow
ows
s st
styl
yle.
e.
46 method   onClick(
onClick(f) is
47 // Bi
Bind
nd a na
nati
tive
ve OS cl
clic
ick
k ev
even
ent.
t.
48
49 class   HTMLButton   implements   Button is
50 method   render(
render(a, b) is
51 // Re
Retu
turn
rn an HT
HTML
ML re
repr
pres
esen
enta
tati
tion
on of a bu
butt
tton
on.
.
52 method   onClick(
onClick(f) is
53 // Bi
Bind
nd a we
web
b br
brow
owse
ser
r cl
clic
ick
k ev
even
ent.
t.
54
55
56 class   Application is
57 field   dialog:
dialog: Di
Dial
alog
og
58
59 // Th
The
e ap
appl
plic
icat
atio
ion
n pi
pick
cks
s a cr
crea
eato
tor'
r's
s ty
type
pe de
depe
pend
ndin
ing
g on th
the
e
60 // cur
curren
rent
t con
config
figura
uratio
tion
n or env
enviro
ironme
nment
nt set
settin
tings.
gs.
61 method   initialize()
initialize () is
62 config
config = read
readAppl
Applicat
icationCo
ionConfigF
nfigFile
ile ()
63
64 if (conf
config.O
ig.OS "Windows")   then
S ==   "Windows")
65 dial
di og = new   WindowsDialog()
alog WindowsDialog ()
66 else
else if (con
config
fig.OS "Web")   then
.OS ==   "Web")
67 dial
di og = new   WebDialog()
alog WebDialog()
68 else
69 throw new   Exception(
Exception ("Err
"Error!
or! Unkn
Unknown
own oper
operating
ating syst
system."
em."))
70
71 // Th
The
e cl
clie
ient
nt co
code
de wo
work
rks
s wi
with
th an in
inst
stan
ance
ce of a co
conc
ncre
rete
te
72 // cr
crea
eato
tor,
r, al
albe
beit
it th
thro
roug
ugh
h it
its
s ba
base
se in
inte
terf
rfac
ace.
e. As lo
long
ng as
73 // th
the
e cl
clie
ient
nt ke
keep
eps
s wo
work
rkin
ing
g wi
with
th th
the
e cr
crea
eato
tor
r vi
via
a th
the
e ba
base
se
74 // in
inte
terf
rfac
ace,
e, yo
you
u ca
can
n pa
pass
ss it an
any
y cr
crea
eato
tor'
r's
s su
subc
bcla
lass
ss.
.
81 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

75 method   main()
main() is
76 dialog.initialize()
dialog.initialize()
77 dialog.render()
dialog.render()

 A*():?
 U2$ 3'$ F"38 M$3'# 6'$ 84 #;3 *6 !$%$'# 3'$
$7"3 38$2 # #$$#$"($2 % 3'$ !)$
)$""32 84
4 "#$ 2'
'4
4+ #
 6* 6(3'.

  GL 'G FGF HG FGHG<  @


G  GG GHL HFF G HG.  <GQF F< G
KG
KG  G HG FGHG<
FGHG<  <GL @ G
FG  G .

 K@, G   J HG GL G G , LHQ L
 G G  J G FHFF  I< G GL
@G < <G.

 U2$ 3'$ F"38 M$3'# 6'$ 84 63 3 5(#$ 42$2 % 
 84 +(!8  %,$6* 6(3'  68 3 $73$# (32 (3$+
",$32.

 #<G <F L G F<FG JL G KG G HG


I<   <L  @J>. BHG J JH G @-
J> <M
<M GG LH FHFF FH  HF <FG  
FG @G?
82 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

 FHG< <F G H G  GG FGHGF @GF


FF G @J> <G  F< GL
 GL @G  G L-
 I< G<F @G < <G< G KG< G @-
G <GF.

&GQF F J GG JH J>. #@< GG LH J<G 
 HF<   FH # @J>. H  FH
I H HGGF, HG G @J> L I<F FH
F. H KG G FG   Button 
FF
FF J<G  <H
<HFF
RoundButton FH
FH
FF.
FF. BHG J LH  G GG
 G @
@<
<
UIFramework FF G HF G J HGG
HGG FHFF
FHFF <FG  
 HG .

 <I G<F, LH G  FHFF   UIWithRoundButtons


@  F @J> FF  I< <GF   createButton
@G. < G<F @G GHF   Button   =GF < G
F FF, LH @> LH FHFF GH   RoundButton -
=GF
= GF.. J HF
HF G   UIWithRoundButtons 
F
FFF <
<FG
FG

  
UIFramework  . A GGQF HG <G!

 U2$ 3'$ F"38 M$3'# 6'$ 84 63 3 25$ 2823$, $-
24
24""$2 !8 $
$42
42((& $7(
7(223(
3(&
& !
!)$
)$"3
"322 (
(23
23$
$#
# % $
$!4
!4((+#
+#(
(&
& 3'
3'$,
$,
$"'
$"' 3(
3(,$
,$..

 H G K< G<F  J < J<G , -
FH-<GF<I =GF FH F GF G<F, W
FLFG@F,  GJ> FHF.
83 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

&GQF G<> HG JG F G   G HF  K<FG<


=G:

1. <FG, LH
LH 
 G
G G
G F@ FG
FG
 G >
> G
G>>  
  
 
G G =GF.
2.  F@
 F@
 H
HFG
FGFF  =
=G,
G, G 

@
@ FH
FH 
>>
   =G <F< GG .
3. V  G GH
GH
 <G G G <
<G
G 
.
.
4. # G
G 
 
 
 =
=GF,
GF, G 
@
@ FH
FH
 G
G
  J
 (  <G G G ).

GQF  G  ! A <G @HFG   HG <G  F< 
F GG LH QG HG G @ J<G H<G .

*L G @FG I<HF  I<G  J G<F


 H   <F G FGHG  G FF JF
=GF JQ GL< G HF. "JI,  FGHG @HFG -
JLF GH $
$66 !
!)$ "322  L W<G<. #G QG GH K<FG<
)$"3
<FGF.

, LH  G I  H @G   


G< J =GF F J F HF< K<FG< F. G
FHF IL @H <>  GL @G.

 H= : I:
1. '>  H
'> HGF
GF 
J
J G F@ <G
<G
.
. <F <G
<G


FH  @GF GG @> FF < IL HG.
84 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

2. A  @GL
@GL G
GL
L @G
@G
 <F<
<F<
 G 
G
G F
FF.
F. 
 -
-
GH GL  G @G FH @G G @@ HG
<G.

3. # G GQF  W  


F
F G HG FG
FGHGF.
HGF.
 L ,  G@ J<G F G G GL @G,
J< KGG< G HG G<  <G G GL
@G.

H @<G  G   G@L @G G G GL


@G G G G GL  GH HG.

AG G<F <G, G   G GL @G @L > G-
GL HL. #G @L I     switch G GG <>F
<>F J<
HG FF G <FGG<G. BHG QG JL, JQ WK <G F
H.

4. J, G
J, G  FG 
 G
G FH
FHFF
FFF
F 
 
 GL
GL  -
-
HG <FG < G GL @G. I< G GL @G
< G FHFFF  KGG G <G <GF  FGH-
G<  @ G F @G.

5. # G
G 
 G
G @L
@L 
HG
HG GLF
GLF  <G F
FQG
QG @>
@> FF
G G FHFFF    G@, LH  HF G G
@G @ G F FF < FHFFF.

 <FG, <@< GG LH I G J< <L


 FFF: G F   Mail FF J<G  H
H  FHFFF:
FHFFF:
AirMail    GroundMail  ; G   Transport  FFF    Plane ,
85 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

Truck    Train  . < G   AirMail FF L HFF   Plane
=GF,   GroundMail @L J>
J> J<G G   Truck    Train
=GF. H  G  J FHFF (FL   TrainMail ) G
 G FF, HG GQF
GQF G G<.  <G 
 FF  H@G G G GL @G  G
GroundMail FF G G J< HG <G JGF G <I.
<I.

6. #, G
G 
  G KG
KGG<F,
G<F, G F GL @G F -
@ @GL,
@GL, LH  @> <G FGG.
FGG . # GQF F@G< G,
LH  @> <G  HG I<  G @G.

 P (+ C


 H I< G<G H< GJ G G  G G
HGF.
 S2+
S2+)
) R)7
)74
427
27&
&
8=
8= P6
P62'
2'4). H  @I G HG -
4)
G<  <G   < G @, @>< G  F-
< G FHG.
 O4)2/C
O4)2/C7)
7)(
( P6
P62'4). H
2'4) H  <GH J GLF
GL F  HGF
<G G @ J<GHG >< K<FG< <G .

   @L @ @ @<G F< LH  G <-
GH  G  J FHFFF G <@@G G GG. 
FG F F
F<
< <F J LHQ
LHQ <GH< G GG <G
 K<FG< <L  G FFF.
86 CG<
CG< DF<
DF<
 *
*GG
GGF
F / G
GL
L 'G

 (: =:/ O:/ P(::


U 'L 
'L F<
F<
FF FG
FGG
G L HF
HF<
<
 F
F"3
"3
8
8 M$
M$3' # (FF @<G
3'#
 @ HFG@<M I< FHFFF)  II GJ A!-
23
23"3
"3 F
F"3
"3 8 , P338$,  B4(+#$  (@ XK<, HG @
8 
@<G).

U A!23
A!23
"3
"3 F
F"3
"38  FFF
8   FFF  G F   FG   F"3-
8 M$3'#2, HG LH  F HF P338$  G @F G
@GF  GF FFF.

U H  HF F


F"3
"3
8
8 M$
M$3' #  J<G I3$3 G G -
3'#
G< FHFFF GH <G GLF  <GGF GG  @-
G< J<G G G<F.

U P338$   <FQG F  <<G, F <G FQG I <GF


J>F.  G G , P688=4) H<F  @<G-
J>F.
 <<G<<MG<  G  =G. F
F"3
"3
8
8 M$
M$3' # <F F
3'#
 <<G HG FQG H<  <<G<<MG< FG.

U F"3
F"3
8
8 M$
M$3'# <F  F<<MG<   T$,+
3'# 3$ M$3'#. AG G
$,+3$
F@ G<@,  F%'
F%'86
86== M)8(  @L
 @L FI F  FG <   T)1-
M)8( 
 4%8) M)8( .
320 pages

from the full book are omitted in the demo version

You might also like