┆ 回首页
 
站内资源搜索:
┆ 将本文寄给朋友  

设计模式之State——交通篇

 

 


〖 作者:GaryFeng 〗〖 大小:20k 〗〖 发布日期:2006-04-07 〗〖 浏览:675 〗

 

     "小朋友过马路,左右看,红灯停,绿灯行,阿姨夸我是乖宝宝。",我给女儿念着儿歌,突然女儿问我,什么是红绿灯啊?为了给她说清楚,我特意带她看我们家附近的交通灯(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这种模式了。

来源: http://garyfeng.blogchina.com/index.html


 严禁发表涉及封建迷信、国家政治等敏感问题的内容
 ■ 对本文的评价(带 * 为必填内容,400字以内)    严禁发表涉及封建迷信、国家政治等敏感问题的内容。

* 您的姓名 
您的电子邮件 
您的个人主页 

*
您的评价 

     

 ■ 以往的评价







以上文章版权由原作者所有。未经同意,不得将其任何一部分复制、转载、发布等未授权操作。


Java学习室 — 陈伟波个人主页
E-mail: zz3zcwb@sina.com
COPY RIGHT 2005