您的位置:首页 > 其它

设计模式之State——交通篇(原创)

2004-10-13 11:36 260 查看
设计模式之State——交通篇<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

“小朋友过马路,左右看,红灯停,绿灯行,阿姨夸我是乖宝宝。”,我给女儿念着儿歌,突然女儿问我,什么是红绿灯啊?为了给她说清楚,我特意带她看我们家附近的交通灯(NearMyFamilyTrafficLight)的运行。我们都知道,交通灯有三种状态:红灯(RedLight)、黄灯(YellowLight)和绿灯(GreenLight)。交通灯状态的改变是由控制中心(ControlCenter)来控制的。
 

下面让我们来看看这个过程是如何实现的。
1、  在这里,先定义交通灯(TrafficLight)接口类:
public interface TrafficLight {
  public void showRedLight();  //显示红灯
  public void showGreenLight();//显示绿灯
  public void showYellowLight(); //显示黄灯
}
2、我们家附近的交通灯(NearMyFamilyTrafficLight)是对交通灯(TrafficLight)接口的具体实现:
public class NearMyFamilyTrafficLight implements TrafficLight{
  public void showRedLight(){
    System.out.println("红灯亮了,不能通过!");
  }
  public void showGreenLight(){
    System.out.println("绿灯亮了,可以通过!");
  }
  public void showYellowLight(){
    System.out.println("黄灯亮了!");
  }

}

3、定义控制中心(ControlCenter)类:
public class ControlCenter {
  private NearMyFamilyTrafficLight trafficLight; //我们家附近的交通灯
  public void changeState(NearMyFamilyTrafficLight trafficLight) {
      this.trafficLight = trafficLight;
  }
  public void showRedLight() { //显示红灯
      trafficLight.showRedLight();
  }
  public void showGreenLight() { //显示绿灯
      trafficLight.showGreenLight();
  }
  public void showYellowLight() { //显示黄灯
      trafficLight.showYellowLight();
  }
}
4、我们家附近的交通灯(NearMyFamilyTrafficLight)实际上有红、黄、绿三盏灯组成:
A:红灯(RedLight)类:
public class RedLight extends NearMyFamilyTrafficLight{
  public static boolean  existRedLight = false;
  public static RedLight getRedLight() {  //获得红灯
      if(existRedLight==false) {
          existRedLight = true;
          return new RedLight();
      }
      return null;
  }
}
B:绿灯(GreenLight)类:
public class GreenLight extends NearMyFamilyTrafficLight{
  public static boolean  existGreenLight = false;
  public static GreenLight getGreenLight() { //获得绿灯
      if(existGreenLight==false) {
          existGreenLight = true;
          return new GreenLight();
      }
      return null;
  }
}
C:黄灯(YellowLight)类:
public class YellowLight extends NearMyFamilyTrafficLight{
  public static boolean  existYellowLight = false;
  public static YellowLight getYellowLight() { //获得黄灯
      if(existYellowLight==false) {
          existYellowLight = true;
          return new YellowLight();
      }
      return null;
  }
}
5、编写测试类:
public class Test {
  public static void  main(String args[]){
    ControlCenter controlCenter = new ControlCenter();   //控制中心
    NearMyFamilyTrafficLight redLight = RedLight.getRedLight();  //红灯
          NearMyFamilyTrafficLight greenLight = GreenLight.getGreenLight(); //绿灯
          NearMyFamilyTrafficLight yellowLight = YellowLight.getYellowLight(); //黄灯

    controlCenter.changeState(redLight); //改变成红灯状态
    controlCenter.showRedLight();  //显示红灯
    controlCenter.changeState(yellowLight); //改变成黄灯状态
    controlCenter.showYellowLight();  //显示黄灯
    controlCenter.changeState(greenLight);  //改变成绿灯状态
    controlCenter.showGreenLight(); //显示绿灯
  }
}
6、说明:
A:State的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为。

B:我们可以看到,灯状态的改变是有控制中心来控制,通过显示不同的灯,实现了交通的正常运转。
C:因此当有状态切换这种事情要处理时,我们就可以用State这种模式了。
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息