Software Design Patterns Made Simple
Software Design Patterns Made Simple
" # $
% # $
% " &
% ' (
)* " +, + (
-* " + + + %+ (
.* " + % + /
* " + %0 + /
1
% " 1
' " 1
" ))
, "2 )-
! , 3 "2 )-
" " ).
% 3 " ).
4 3 " )
3 )$
)$
4 2 )&
3 )(
)/
% % )/
' % )/
% )1
% -5
% % -5
6 % 3 % -5
% 3 % -5
3 7 -)
-)
4 2 --
8 -.
% -.
' -.
-
-&
% 3 -&
! % 3 3 -&
0 9 3 3 -&
% 4 -(
! 3 -(
: ! 3 -/
3 -/
-/
4 2 .5
•
•
• ! ! ! "
# $ % & !
• & $
'( ) !
*( ) ! !
+( ) !
,( ) ! (
• ) ./0
. 1
• 2 ! ./0 3 ! ( !
2 ! " 4 2 "
(
5
6 ! (
7 & ! " 6 7
(
! (/ !
!
! (8
! # !
! 6 (
! ! ! 5
9 : ; : < < 3 = 9 !8
9$8 >
( 9 !8 9$8 ! !
(
! ($
" ! !
! (;
(
• & ( !
(
• & ! 6
! (
• & ! ./0 (
% ?
?
!
)
% ! ! 6 6 " % 8 9 5
@ (@ ! 8
! (0
• ; !
• ; !
• ; ! (
" !
8 ! ! 6 (8
2 (0
! - (
• %
• %
• A
!
•
• %
) ! 9 ! ( !
6
• "
•
• # (
• "$ (
• % (
6
• $ ! ! !
• $ ! ! (
• "
% ! (
(
! (( 9 5 9 ( 9
! ! (
(
"
• ; 6
• ;
• ! ! (
8 ! ! !
(8 ! !
6 ! (
• #
o 4 ! !
! (
• "
o 4 !
5(( 8 &!
• "
o 8
&! (
• "$
o 5 ! ! "
!
! (
% ! (
" &
; ! (@
(
'( )# )
8 ! ! () !
! !
! ! (@ 2
!
! ! " #
$ % & ! !
% & ! ! ! ! #
$ ! 9$8 "
! $ (
!
! (
*( ) )
) ")
@ ! (
!
5(( 8 &! (
% ! (
!
%
'## ( ) !&
! %
* & ! !
% * & #
% (
" (& ! ! !
(% !
(
+( ) " )
@ ! (8
! ! !
( (
" 8 &!
! (#
! 6 ! (
(
8 / ! &! ! (
# 8
/ ! (
! !! )
( " ! ! !! #
! !! %) ( " !
+! ! & $ % , &! "
& (
( 6 (
& ! ! !
,( ) "$ )
! ! !9
! ! (
! (;
! !
!
! (( !
!
! 5 (#
!! (
' ! ! !
- ! ! ! #
! $ % !&
% !& !" !
! #
# (% ! 6 !
!!
(
@ # (
)!
" !
. ! /
001/
"
! (! !
• ! !
" #
&
./0 ! (
Fig 2 - Observer Pattern
! (
! ! (% 6
! (8 % 6
- * !! " $
-*
$
-* Update
" #
. -
! ( !
@ !! ( % 6
(8 ConcreteSubject
-2 $
! ! !
! ! 6 ( $
-* ! "
!
! 6 ! 6
! (
-* !! #
! $ ConcreteObserver
GetState $ !
$ 3 #
@ ! (
(
Fig 3 - Solving Our First Design Problem
4 SetBallPosition ! !
Notify ! ! # ( @ !!
Update ! ! (4 . !
!
GetBallPosition ! 8 (
# -
!# (
# . -
!8 # (
'Some external client will call this to set the ball's position
NotifyObservers()
End Function
!IObserver ( !
! ! 1 $ (
" .
! ( ! IObserver
% .
!: ! (: ! !
IObserver
! (
Public X As Integer
Public Y As Integer
Public Z As Integer
Me.X = x
Me.Y = y
Me.Z = Z
End Sub
@ ! (4
! ! (
! (
ball.AttachObserver(Owen)
ball.AttachObserver(Ronaldo)
ball.AttachObserver(Rivaldo)
ball.AttachObserver(Mike)
ball.AttachObserver(John)
ball.SetBallPosition(New Position())
System.Console.WriteLine()
ball.DetachObserver(Owen)
ball.DetachObserver(John)
System.Console.Read()
End Sub
End Class
% -
! 6
/ 0.
!
• 4 (
• 4 (
4 ! 1 % # (8
• $ 6
! 6
• # 6
(
; ! (
" "
(: ! "6
! (
(
• !
%
'## ( ) !&
• ! %* &
! ! % * & #
!
5(( 8 &! (
% ! (
( ! (
(0 % (
& "
% ( ./0 !% (
! (
• "
! !
( !
(( ! !
%
& % %
&! (
• . "
(
! % (< ! !
+ 4 )
• . 1
1 ! (
6 ! (
"
@ % (
(
; " , ! ( 2 "
" ! % (
!
! ! % &! % !
! " ! (4
, 5 ! , ! ! (B
( ! (
# ( ! !
(
"
" "
! % (
2 " . "
! % ( ! %
" . "
! &! % ( ! %
. 1
! (
(
'Function to play
Public Sub PlayGame()
'Print the team's name
System.Console.WriteLine(teamName)
'Play according to the strategy
strategy.Play()
End Sub
9 5
( (
System.Console.WriteLine()
System.Console.WriteLine("Changing the strategies..")
End Sub
End Class
% -
5 6 ! (
3
"
&
< ! ! - ($
8 / ! (
) 8
/ ! &! (# "
!
! ( ( ! C (%
(
! !! )
( " ! ! !! #
! !! %) ( " !
+! ! & $ % , &! "
&
& 6 (
( ./0 !&
(
Fig - Decorator Pattern
! (
• .
1 ! ! (0
(
• . .
1 1 ! 1 (
! 6 (
& ! 1 ( !
! ! ( ! 6
! (; !
& ! 1
(
• .
(
@ &
(
) $ 4 "
! (4 5
(8 ''8 ($
8 &!
(4 ''! " ''!
'' ! !
! ( ! "
(
8 ! !
(
! 6 !
! ! (8
! / !
! ! ! !
(0 ! 6 ! 8
( $ ! ! &
(
% ( (
" .
" . .
!8
$ 4 . .
!9 B
" %
! :
!8
End Sub
5 .
!/ 8
!& !
'-- Step 1:
'Create few players (concrete components)
'Create few field Players
Dim owen As New FieldPlayer("Owen")
Dim beck As New FieldPlayer("Beckham")
'-- Step 2:
'Just make them pass the ball
'(during a warm up session ;))
System.Console.WriteLine()
System.Console.WriteLine(" > Warm up Session... ")
owen.PassBall()
beck.PassBall()
khan.PassBall()
System.Console.WriteLine()
System.Console.WriteLine(" > Match is starting.. ")
System.Console.WriteLine()
System.Console.WriteLine(" > OOps, Owen got injured. " & _
"Jerrard replaced Owen.. ")
System.Console.WriteLine()
System.Console.WriteLine(" > Beckham has multiple responsibilities.. ")
End Sub
End Class
% -
! 6 ! (
.
• / (
• / " 6
• / ! ! D
16 ( .