Design Pattern学习笔记 --- State模式

㈠:State模式属于对象形为型设计模式;它是将对象在不同状态下所表现出的行为进行抽象成类;意图是:允许当类的状态改变时改变与之对应的行为;

㈡:类图

㈢:场景描述

    最近欧洲杯如火如荼地进行啊,要论焦点人物,当然是巴神莫属啊.现在我们就以他为例来Mapping一下State设计模式吧.

    巴神神的时候,可以打进惊世倒钩;

    巴神Crazy的时候,会思考下人生;

    正常的巴神;你永远不懂啊;

    这不正是巴神在不同的状态下所表现出的不同的行为吗?

    欧洲杯正是巴神所处的Context啊.

    抽象之: 

  
  
  
  
  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.  

   

 

你可能感兴趣的:(巴神,state模式)