论坛首页 入门技术论坛

state模式,我的理解

浏览 1993 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-08  
  car 的速度不同的状态(它有不同的档速,),你想car跑出不同的速度,你可能要用到if else 或者swith 去判断它的档速,
    选择怎么跑,使用state模式用来把这些状态抽出来成一组状态的类.
java 代码
 
  1. public class Car {  
  2.      private CarState speed = new FirstState();//这里默认的状态  
  3.        
  4.      public void change(){  
  5.          speed = new SecondState();  
  6.      }  
  7.      public void speed(){  
  8.             speed.speed();  
  9.      }  
  10. }  
  11.   
  12. public class FirstState extends CarState{  
  13.   
  14.     @Override  
  15.     public void speed() {  
  16.   
  17.         System.out.println("第一档速度");  
  18.     }  
  19.   
  20. }  
  21. public class SecondState extends CarState{  
  22.   
  23.     @Override  
  24.     public void speed() {  
  25.          
  26.         System.out.println("第二档的速度");  
  27.     }  
  28.   
  29. }  
  30. public class RunPatternState {  
  31.     public static void main(String[] args) {  
  32.         Car car = new Car();  
  33.         car.speed();  
  34.         System.out.println("换档:============");  
  35.         car.change();  
  36.         car.speed();  
  37.     }  
  38.   
  39. }  
 上面只有两个状态,真实的应该是有很多状态.这里只是举例怎么把不同状态抽出来成一个单独的类.
  你完全可以把不同多写这么多类的,完全可在Car的speed()直接用if else,有些类的状态是很多,那会有一大堆if else的
  ,变得不容易维护.下面把上面的类改造,让它不陷于只能两个状态的
java 代码
 
  1. public class Car {  
  2.      private CarState speed = new FirstState();  
  3.        
  4.      public void change(CarState state){  
  5.                speed= state;        //改了这里  
  6.      }  
  7.      public void speed(){  
  8.             speed.speed();  
  9.      }  
  10. }  
  11. 增加一个新状状  
  12. public class ThirdState extends CarState{  
  13.   
  14.     @Override  
  15.     public void speed() {  
  16.           System.out.println("第三档速度");        
  17.     }  
  18.   
  19. }  
  20. public class RunPatternState {  
  21.     public static void main(String[] args) {  
  22.         Car car = new Car();  
  23.         car.speed();  
  24.          
  25.         CarState state = new SecondState();  
  26.         car.change(state);  
  27.         car.speed();  
  28.         CarState state1 = new ThirdState();   
  29.         car.change(state1);  
  30.         car.speed();  
  31.     }  
  32.   
  33. }  
刚学习设计模式,不知道我这样理解state模式有没有错.大侠们可以指出
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics