You are on page 1of 149

m

 



? 

a    
        
 


  

      
   
  
    
!    a"
           
  #    
     

$
   

ï  
       
is a software engineering book describing recurring solutions to common problems
in software design.

Erich Gamma
Richard Helm
Ralph Johnson
John Vlissides

^
ï  

!    a"
 


u    
    
  
  
 
         
           

    u

      %  


    
 

&
? '  (

'    )  


º   
      
   

        

   
  
º
      
   

*
! +!

oupling:
?  
 
   #
— 
 #
 
,# 
  
   
  
     
 
ï ïevice Management ïrawbacks of high oupling:
º 
 
  

º 
   
º '  " 
 
º !  

º "      
User Management

-
! +!!

ï ïevice Management
menefits of Low-coupling:
º   
º    
º !  
  


User Management

a
)      

 
  

.   
 /   

‰
! +!!

ohesion:
  

   '
0


a   
0
'
 11‰
0
) 6


a   
 114
0
 6
 11‰
5
223 
 

) 0
 114
%%
22m 
   5
5 
 0
5 %%
5
5

º onceptual unit can be understood easily.

‰‰
  ! 

               
      

78
    
 9  

‰ !    

4      

9 m   

‰4
!    

X
 )   
X 

   )      / 
 

X    
      
X 
     

     

‰   
  
 
   
  

‰9
!     

!     
   

‰ !!    


4 .) !    

!               



.)      
       ) 


     
)         

   


  
     
.)       

 )  
 
     )     )    
) 

‰
     

X       
 
) 
  
     
X  
 
          
  
X  )   
   )     
  
:  /    

‰ a
 
4 m 

9 !  
 '  
$ 8 
^ 8;

&  "

‰$
m   

Xm                


 
  ) 
Xm       
    
Xm )    )         
‰ !

4 <   
9 <   
 =
 
$ = 
^ . 
&   
*   
-   
‰  +  >!  

‰^
! 78'  

˜     

     


     
 ˜   ˜   
   ï    
    ˜  
  
   
 
!

 
" 

‰&
'   

  
˜          

    
 8   ?        
     

  ?       
   
   
?   8 '   
  8     
  8    
     

‰*
Úatterns Úeriodic Table.

The holy
The holy origins.
Structural
 a
Factory
Adapter
Method
The holy
  mehaviors   ï
hain of
Úrototype Singleton omposite ïecorator
Responsibility

a  ï ï   
Abstract Template
ommand Mediator Observer Interpreter Úroxy Facade
Factory Method

       
muilder Strategy Memento State Iterator Visitor Flyweight mridge

‰-

  

  
   

4
  <  
3'@

‰ '   
4 !  
9   
 8 
$ <   
^ . 
&  
*    
- !

‰  a
 
‰‰  "
‰4 m 

‰9 8



'     

a 

     ) 


 '   

"     " 
  

%

     


    

    

?<    %        


  <

      <


 <" 
) :      <


    

44
<  +!  

!  


% =
A%B   
% @
 %" 

<  
% =
A%B   
% @
 %" 

  
% m     %  

49
a
 

!  


% '      <  
% !   %
) 
 
 
 

<  
%   
% '     % 

4
'
 

!  


% 
 
  
 

% '   ' m

% '  /  
       
 )     


<  
% ' 
       
% !     
     


4$
F=G!' 

!  CC<  DD

   E

!  !  '  


!  E 

.   E
   E

!  '   ‰ !  '   4

   E
   E

4^
7 <   

3'     '   


  

     

 
  

" E!      '   0


  
 m  6
!   0 5
 m  6
m  m 0 m'" 
'   0
   6 m'!    0
5 m  1  m 6
5  6
5

 m  0
   AmB
5
5

  '   
   1  '   !   6

4&
'   


8<   

3  

4*
'   


m 


8<   

3  

<   


4-
3   

m 

  

 1
m 

 <   
 
8<    
 6

9
'   


8


3  

G 


G 
 
1G 
 8
 A  B6

 
G6


3   







8
 



E 



 
6

G 
  



G6

6

94
" % 4
public interface I omponent { public interface ïecorator extends I omponent {
public void doStuff(); public void addedmehavior();
} }
public class omponent implements I omponent{
public void doStuff() {
System.out.println("ïo Suff");
} public class lient {
} public static void main (String[] args)
{
public class oncreteïecorator implements ïecorator { I omponent comp = new omponent();
I omponent component; ïecorator decorator = new oncreteïecorator(comp);
public oncreteïecorator(I omponent component) { decorator.doStuff();
super(); }
this.component = component; }
}
public void addedmehavior() {
System.out.println ("ïecorator does some stuff too");
}
public void doStuff() {
component.doStuff();
addedmehavior();
}

99


F'  

H 

    



) 
 
     
      ) 

H       




H"    . 


  


    

9
  

= "    

'      %% %  

   

9$
ï  

a —    
—     —    )  

[
   —

9^
!    

a!  )  



  
% %  ) "    

!  .) E.)      ) 

! )            %  

!      



) 
  ) 
  
—
 — 
  

 u%u    ) 

9&
F=G!' 

! 

.   E

!  
 !


G !  

.   E
.   E
8 

a

!      


 !


9*
7    !    

! 

G G !   G

G G G

!  !         )    
   <    G   / 


   < 
  !      
 /   
  
    

     


2    


9-
   

!  E
º
     )    
º   
       
   
º
    
 
  

GE
º   )    a

º
    )    

!  E
º
    

º   
%  
    !    


7 <   

   0
  6
    6
 +  
 6
       0
 6
    6

 1+  6
5
22    >  



   0

 

 6
5

    0

  6
5
5

‰
7 <   

 


   0
  1   Aam!‰BB! .B6
   1   A=+BB=  +B6
    1   A+BB 
 +B6


 6


  6
   1   A=7BB= B6
  
= 1   Aa'+=7BBa
 = B6
 

 6
 


= 6
   1   A BB B6
  ‰1   A‰BB‰B6
 

 6
 

‰6
5
+  .
 1  
 6
.
 I1 0
  .
 6
50     u
      Eu  65

4
3'@<   

3! 

3m  3! m" 0  3G

3! m"=<  3= 3


m =< 

9
'   +!  

!  



       
 

a
     
    
        

   


         
  
          

  

              


!  Ea  

F  

º        %  ) 

º       


    
) 


) !   )  
       

$
a
 

<     

 
  

<       


      

      

^
     

   '    


   
   
         

=     ) 


      

   

  

             

&
   

˜   
! " <   a  <  

˜   ˜   ˜  ˜

a  <   a  <   a  <  

*
   

 !   E


º
      
  ! " 
       

 !     

!     E
º            

! " E
º  
 !     ) 
º        ) 
º  
         
 

-
7 <   

  "   0
"  0 
"  !"   6
 "      6 5
 
6

"  "      
0
   1   6 16
5


 <0
  6
5


"  !0
     "  ! 6
5
5

$
7 <   

!  "      "   


  "   0   "   0
   
a 1 9 6    
a 1  6

"  !"    
"  !"   
0 0
    <Ja 6     <Ja 6
5 5
5 5

   "   
  "   0
   
a 1  $6

"  !"   
0
    <Ja 6
5
5


7 <   

  
 KL 
0

"     1"  !     ‰ 6


"     41"    "   ‰ 6
"     91"     "   ‰ 6

        "  !6


        4"  !6
        9"  !6
5

$4
3'@   

˜   #   

 #   #  # 

$9
3'@<   

 16


m A‰B6


m A4B6


m A9B6


m A B6




m A$B6


m A^B6

$
3'@<   % 

 16
 G  7 
G  946


m A‰B6


m A4B6


m A9B6


m A B6




m A$B6


m A^B6

$$
a 

F       

º    

     

º 
  
     
 
       < 
 
   


        

º    
% %    

º  
             
           



$^
a
 

l a   



   


            
    

l m               


    



l         / 


    
u u     u%u   

$&
'
 

X <   ) 

X a         

$*
8    

'     )   




    8  = 
 
     


     / )     


      )    

8          


 

  %   


$-
F=G!' 

˜ 

  = 
E 


  ˜ ˜ 

  = 
E 


^
   

 
 E
'      )     
  
!  
'     
   )   

!  !   E
. 
    
     !   



7 <   

<! 8  0


<!  <!   0
<! 16 <!  +‰0
 /u! u0  <! 8    6
1! 6 <!  +‰<! 8    0
5 /u  u0   1  6
1  6 5
5 /u+u0
1+6 <! 
 !  0
5 <! 61   <!  6
  6  6
5   6
5 5

  
 KL 0
<! 8    1<! 8  6
<!  +‰ 1<!  +‰  6
m E'   
 !u! u6
5
5

^4
3'@<   

m
  1m
 8    Gm
 !  6

m
 41m
 8     
m
  
m
 a< '6

m
  
1m
 8    
mm
 6

^9
3'@<   M  :


8  = 
3'@E

) !
  < 6

^
a
 

º   


 
  %    


º  
  !  ) 
 
   
  "   ) 
   

º !     8   


 

        

         

^$
'
 

º !    !   )  


     !  ) 

^^
<      

 
      — /  
  "  
      

a  — )      )     


   )  < 
—    
— —  

"   


 
 

^&
   

˜   
  
8  
!  <    
" 
<'
!  < 

˜    ˜  

!  <    

         

^*
   

<    E
'   
   

!  <    E
<   <      
@           

a  E
'     <    )

!  a  E


<   <                
!  <   

^-
0  !  

º ?
   <       A   B3
º )        <      
º a            
 
  
        ) 
º    )         

       ) 


º 33'@‰‰ 
   E+  

 

º 33'@‰4 

!     
  
   
<      

&
 $    

  =   


         6  

  .) "  


   "     
 E  "   " 

!  
E

=   1D<'

"  1D" 


 !  < 

     8  8  


    
    



a 

F <       E
º       )   "   
      

º           ) 

º  
      
    
              

&4
!/

m 

X      a        
  

X         
X        /

#

I

&9
.    

'% % 
 
  )   ) 
   
 
   


 
   

  )       


 a)  
  
 
   a    
  
) 
   <    /  
)         ) #  

 
     %) 
    < 
       
@    a      
  

&
m  

.) ‰

.) 4
)

.) 9

.)

&$
   

 !

  .       


   .   
  .  

˜ ! ˜ !

˜ 
     

  

&^
   

) E

    

 .  ) 
.  E


    )   
 

) 
!  ) E
        !  .  ) 

         
!  .  E
    !  ) ) 
   .  
         
    ) #

&&
3'@<   

        .     

‰ .  <  


. 
 ) 
 

4 3m  


       
  

&*
< .    

, " 
. 
º     %   
 3   

&-
3m  


      


  

     


  


        a G   
  E
a G    1a G  
0

   
a      
0

5
56
3m  13m u =u6
 

a G    6

*
a
 .    

   ) 


.  

3= 3=    



 %
  

   

R     —
— —  


!     .    

º    F  )     
.    
     

º  .  )  



 
 
º ,  
  
 )    
 

*4
   

   


 
    
'#    
     ) 
     
  
  /   


     
 / 
 
<     
      
#     

*9
   

 
   
   
 < 

   E

  &
º
 <         / 
 <         
3

*
7 <   

       '


‰   
        
   
        
  

         ( 


  

*$
7 <   

 0
!
 0
  
  KL0
 !
 0 !
  
 1!
  !
 6
5 
   ' A!E2 BBF8%*B 6
5
  !
  
 16 5

    


 !
 0
 
 110

 1!
 6
5
5
5

*^
3'@<   

  1   6


! 1)/'  =  ! 
 =  1)" =    

  =  1     = 


    1   '   

*&
   


‰      


 



    
" E
! 0
    /< 16
    < 0
/< I10
/< 1 6
5
5
<   
        
      
    
    

   )   

   
    /< 1 6

**
   


4 ?      .)    


.) : 



 )1  < 

  
.) 1  )6

   '  #)  


  

  
 .) : 
  
!   
" " 

.)   !   


" 0
 !   
" 6
5

*-
 
%   

     


%  


  
     
   !  < 
0
22F "        
G !   6
 11
0
 1 6
5
FG !   6
   6
5

-
'% 
G 

?      


  


  

   
    
     
 
      
   

N :
   N : "  


'% 
G    

 11 22   


0
22F "        
G !   6
 1122

0
 1 6
5
FG !   6
5
   6

-4
<  

A u 


    
    B
% m       
" E
a     
  a 


 
    2  
  

% 

 
a
 
  
    A?  B
%         "  

 


  ) ?  

-9
<  ?  

?  0


   ?  C?  D  6
 ?  05
    
?   < 0
?    6
  110
 1?  6
  1?  C?  D  6
50
 1   6
  110
 1?  6
  1?  C?  D  6
5
5
    6
5
  

0
     u?  7!#
u6
5

-
<   <

  



   

F     


   >   
 ) 

 
   

‰  )          3+=


4  )    
  
% <   
 
    #    

9   %  

  
% < 
  
   <
 

-$
a
    

˜    ——


 
—
—  
—
 
     
—

    —

  

-^
'
    

. 

      
" 
  )  /      
    

.)   


 

 
  ) 

   
 
     
       ) 

-&
     

    
)        

  )       
     ) 

  

-*
   

˜    
 <  !

˜   ‰ ˜   

! !

--
F=G' 

!    

!  !   ˜    

! ' 

  

‰
7 <   

  !a
" 
!0
!a
  6
5    !a0
 0
     u      
u6
5
!a
  0
     u   u6
    +16
0
  +1   6
5  " 0
     u   u6
5
     +6
5
5

‰ ‰
7 <   

!   !=0


!a0 !=0
!0 5
     u!     
u6 !a!
5 !a   0
!a
  0      
  6
     u   5
! u6
  !6 !aKL=   ! 
5 !a   0
   0 !aKL   +1!a
  u=u6 K ! L6
5   1 6C ! 60
5   +KL1   
  6
5
     +6
5
5

‰ 4
7 <   

 0
  
 KL 0
!==1!=6
    1 6
!   1!6
!
!1!=!  6
 
 1 =!   6

 < u  


 u6
     
 6

!aKL!1== ‰   6


 < u!  ‰  u6

!aKL 1== ‰    6


5
5

‰ 9
3'@<   

<  
  3!
.)  


‰
F


       
      
  

‰ $
a 

?       


  % 
 "  

6


          
    
 6
  
  
   

‰ ^
a
 

< 
    
        
 
    
a     —
   
R—  —
  

—
—


˜   —     —


 —

‰ &
'
 


          !
    
 

‰ *
!
  

˜   


   )  
    
 a
)    
     

!   


 / 
!
    
 /    


<  /    


) 
 
   

<          /    
          

  
            

‰ -
   

  ( **  ++


˜  
" 

 ˜ ˜  


  " 

‰‰
 E22  2)O
O   2
O    

‰‰‰
3'@<   

l ? 
3     
  

 "
           


l ?        


a—         —      

l G # 
          
 8P. 
8P " 
   


     
 
 


l     8=)   . 



 " =< 


  

l <   


 

l a   —          

‰‰4
3'@<    :


   
a   0
.) )1  6
)11. . 6
)11 " " ! 
6
)11 
 
! 
6
5

 
. 0
8'
18' B. B8'G.a'5
 
" ! 
 0
  "  65

 
 
! 
 0
 m 7 
!  '6
5

‰‰9
7
  "  Q

       



 
M  
 
   
—     
   


<

      #


   
 ) %  
 3


     
    
) 

< 
#
  
  )   


   

‰‰
. 

)   
    
 
 E


   
a   0
!

1!
  6

" 6
5

‰‰$
!
.)

º .      )   



    
 !
)  
º a!
)   "  
  

    ) 
º =   !
)        
  !

0

" 6
5

.      !


         

   )                

‰‰^
 ˜    0

         


a G    E
m 
  a G  0

   
a   0  m  
!  
6
5
5

8 "   a G  0



   
a   0  "  65
5


        
. 

a G  8. 6


 " 

a G  8 " 6


 


a G  m 


6

‰‰&
  , 

a     !



       

     
" F
  

)     ) 


       
/ 
 
    
  /     
 

 E22) 
2) 
2)% ^%‰--*2)% ^%
 
 ( 1‰


‰‰*
˜ -  ˜  

!
    /E
‰ !

  )          
       

4 !
   %)    

" 


    ) 

9 ,
   


 < #  

!
 
#  
" 

‰‰-
'
 !
  

º   
 
    

‰4
a
    
%     %  

a
       
         

      !  
 a
  ) 
 
         . 
a
             
         

     
         
a
       
 " <  


     
  

‰4‰


!          "  


F a
     
X   " 
   
  
 

X              

      
#   
    

X 
  "   #   
 
    % a) 
  

      

‰44


!   


/   / 


/   / 

‰49
 

! E
!   )        
  E
' 
%     ! 
a
 E

"     

 
a
  E
a
    a
       

˜   &


!    a
   <   

  a
          / 

‰4
 

     


 E   
 )   

<   


    



 

   
 
  
 

  

    


  
 
   
 
     

‰4$


a
    E
‰ !a
  
º F      
º 
    
           
"  

      %" 
º !a
      /  
3
4 .) a
 

º 
        
º <    
         

) 

‰4^
˜

‰ 

 
‰  


˜  

  a
 

?   
a

= 
‰

   
a 

 


‰4&
!



 
m

˜  


  a
  
 a
 

?   
a


   
a 
  
m

‰4*
˜"!

!
  E

º ?:    


 
 
 
  
      
º G  
   
 
: 
  
    



.) 
 
º !
 
 
       
   
º /         
 
) : 

       

‰4-
? a
  

a)  
 
     
a           
 a
   < 

 
) a
     a
 )    
) 

  
 
    
 
      
 

     
  
  :
 
   
   

3      


     
  
  E 

‰9
<  ? a
  

ï     


  KL
0
    1  6
 '     '
1'6

 '6
5

a
  
  1a
   
6
   

   '6
 '

    6

a
  
    '   a
  
'

‰9‰
<  ? a
  

  <'0   <  0


 '6    6
5 5

'   


  <'0   <  0
 '6    6
5 5
!  0
  
  KL0
a
    
'
1'6
<'<  0
   1  6
 '
6

 '622.% a
 
    6
<'
1a
   6
a
  '
0 
1
5

 '6
a
     0  1 5
<   '1a
  
6

 '0    5
'   6

   0
 '5
5
5
5

‰94
 

a
 
   
a       
    

<  G  


   

‰99
 0

< 
    
 
     
3<  3
      
    
   .   

 3
   ?
a
  

  a


  !3'@
º !  a
 
º !  a
 
º 8a
 
º @ a
 
º =a
 
º == a
 

‰9
  

X a
   )      

X a    



        

ï  

   


‰9$
 

 " E
% <    .) 
% a    
       

º <       ")  "   " 
  
 
  
   #   
 
    
    )    
º <  ) "         " 
        
  ) 

º      


     
) 
            ) a " ) 
    
    
    ) 

‰9^
% $

‰9&
% $ .

˜ !    (

‰9*
 



 "     


     

  )           


 

 " )        ) 


 " 
       ) 
 

/       / 

 I
<   " )        
          ) 

‰9-
  "
‰    
 
   )  

  

  


 
  
    
a     ) 

) 
   
    


  —   a——

   
 

    
      ) 

 R  —  
%         
%         )    
 
         
% 
    )    #    

%      )  
  #
  
   )  

‰
  "

r ˜     
'     )   / 
   
    " 
! ˜—  
 
         "       
        
" #  
       
   

$ R— %    
       
   

‰ ‰
   

! 
/ 

  

/  / 

.) ' E

˜ 
)   
)  

‰ 4
 

 " E
º         "   ) 
º 
  
  ) #   "  
   
   ) 
º     ) 
      


  
) E
º
    ) 
 "    " 

  ) "  

) E
º
  )     "    

‰ 9
3'@<   

3'@  
 "      )    
º   >  E
‰ )   " 
4 )  < 
 

º ) +  
 +  
: 
    
      " 
           
   


)"<<  

 
 "  
) <

‰
" 

+ % "


  <+0

  6
  
  6
 

 
6
! 
  6
 
  6
5

!   <+0


  6 ! 0
!  0 165   
 KL 0

  0 <+1! A<
u6
     u! uu  
u6   6
5  
6
22   
    
     6
22   5
5 5

‰ $
" ! :

+  "


   
 
 

!  "
   

+ "   <+0 ! 0


 <+6   
 KL 0
+ " <+0 165 <+1! um  u6

  0 <+1+ " 6
     u+ " Em  u6   6
  6  
6
     u+ " E 
  u6   6
5 5
22   
    
   5
22  
5

‰ ^
a 

 "     


        

  )      

       "     

‰ +  " 
4   " 
9     " 
   " 

‰ &
a
 

 "     



  ) 


 
   
 
  
 " E

‰ a   " 


    )  

  


 

4 a  "        ) 





9 m     "
   

   
 ) 


a
   

      ) 
 "  
   
'    

  

‰ *
m 
  

‰ -
 " =<

‰$
m 
   
       )
m 
G 
     )   

‰$‰
 

 E22  2

‰$4

You might also like