Design Pattern學習筆記 --- State模式

㈠:State模式屬於對象形爲型設計模式;它是將對象在不一樣狀態下所表現出的行爲進行抽象成類;意圖是:容許當類的狀態改變時改變與之對應的行爲;設計模式

㈡:類圖app

㈢:場景描述ide

    最近歐洲盃如火如荼地進行啊,要論焦點人物,固然是巴神莫屬啊.如今咱們就以他爲例來Mapping一下State設計模式吧.測試

    巴神神的時候,能夠打進驚世倒鉤;this

    巴神Crazy的時候,會思考下人生;spa

    正常的巴神;你永遠不懂啊;設計

    這不正是巴神在不一樣的狀態下所表現出的不一樣的行爲嗎?orm

    歐洲盃正是巴神所處的Context啊.對象

    抽象之: get

  
  
  
  
  1. /** 
  2.  * State下共同的行爲抽象 
  3.  */ 
  4. package com.skywares.designpattern.state.abstractState; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public interface BalotelliPlay { 
  11.     public void play(); 
  12.  
   
   
   
   
  1. package com.skywares.designpattern.state.concretestate; 
  2.  
  3. import com.skywares.designpattern.state.abstractState.BalotelliPlay; 
  4. /** 
  5.  * 神同樣的巴神 
  6.  * @author hubert 
  7.  * 
  8.  */ 
  9. public class BalotelliGodPlay implements BalotelliPlay { 
  10.  
  11.     @Override 
  12.     public void play() { 
  13.         System.out.println(" 打進一個倒鉤 ...... "); 
  14.     } 
  15.  

 

    
    
    
    
  1. /** 
  2.  * 瘋子(呵呵) 
  3.  */ 
  4. package com.skywares.designpattern.state.concretestate; 
  5.  
  6. import com.skywares.designpattern.state.abstractState.BalotelliPlay; 
  7.  
  8. /** 
  9.  * @author hubert 
  10.  * 
  11.  */ 
  12. public class BalotelliCrazyPlay implements BalotelliPlay{ 
  13.  
  14.     @Override 
  15.     public void play() { 
  16.         System.out.println(" 單刀了, so easy,思考下人生!! "); 
  17.     } 
  18.  

 

     
     
     
     
  1. /** 
  2.  * 正常的巴神 
  3.  */ 
  4. package com.skywares.designpattern.state.concretestate; 
  5.  
  6. import com.skywares.designpattern.state.abstractState.BalotelliPlay; 
  7.  
  8. /** 
  9.  * @author hubert 
  10.  * 
  11.  */ 
  12. public class BalotelliNormalPlay implements BalotelliPlay { 
  13.  
  14.     @Override 
  15.     public void play() { 
  16.         System.out.println("巴神的世界你永遠不懂得 .."); 
  17.     } 
  18.  

歐洲盃登場:看巴神表現:

 

      
      
      
      
  1. /** 
  2.  *  Context; 
  3.  */ 
  4. package com.skywares.designpattern.state.context; 
  5.  
  6. import com.skywares.designpattern.state.abstractState.BalotelliPlay; 
  7. import com.skywares.designpattern.state.concretestate.BalotelliCrazyPlay; 
  8. import com.skywares.designpattern.state.concretestate.BalotelliGodPlay; 
  9. import com.skywares.designpattern.state.concretestate.BalotelliNormalPlay; 
  10.  
  11. /** 
  12.  * @author hubert 
  13.  * 
  14.  */ 
  15. public class EuropeCupContext { 
  16.     private BalotelliPlay balotelliPlay =  new BalotelliNormalPlay(); 
  17.      
  18.     private int competitionSession = 1
  19.      
  20.     public int getCompetitionSession() { 
  21.         return competitionSession; 
  22.     } 
  23.  
  24.     public void setCompetitionSession(int competitionSession) { 
  25.         this.competitionSession = competitionSession; 
  26.     } 
  27.  
  28.     public void changeSession() 
  29.     { 
  30.         switch(competitionSession) 
  31.         { 
  32.         case 1
  33.             balotelliPlay = new BalotelliCrazyPlay(); 
  34.             break;   
  35.         case 2
  36.             balotelliPlay = new BalotelliGodPlay(); 
  37.             break
  38.          default
  39.              ; 
  40.         } 
  41.     } 
  42.      
  43.     public void balotelliPlayInMatch() 
  44.     { 
  45.         balotelliPlay.play(); 
  46.     } 
  47. }
測試類:
     
     
     
     
  1. package com.skywares.designpattern.state.context; 
  2.  
  3. /** 
  4.  * @author hubert 
  5.  *  
  6.  */ 
  7. public class TestState { 
  8.  
  9.     /** 
  10.      * @param args 
  11.      */ 
  12.     public static void main(String[] args) { 
  13.         EuropeCupContext context = new EuropeCupContext(); 
  14.  
  15.         context.balotelliPlayInMatch(); 
  16.  
  17.         context.setCompetitionSession(1); 
  18.         context.changeSession(); 
  19.         context.balotelliPlayInMatch(); 
  20.  
  21.         context.setCompetitionSession(2); 
  22.         context.changeSession(); 
  23.         context.balotelliPlayInMatch(); 
  24.     } 
  25.  
相關文章
相關標籤/搜索