Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
设计模式之State——交通篇(原创)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

设计模式之State——交通篇

 

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

  }

  //控制中心控制我们家附近的那盏交通灯

  protected void changeState(ControlCenter controlCenter, NearMyFamilyTrafficLight trafficLight) {

      controlCenter.changeState(trafficLight);

  }

}

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 = new RedLight();  //红灯

    NearMyFamilyTrafficLight greenLight = new GreenLight(); //绿灯

    NearMyFamilyTrafficLight yellowLight = new YellowLight(); //黄灯

    controlCenter.changeState(redLight); //改变成红灯状态

    controlCenter.showRedLight();  //显示红灯

    controlCenter.changeState(yellowLight); //改变成黄灯状态

    controlCenter.showYellowLight();  //显示黄灯

    controlCenter.changeState(greenLight);  //改变成绿灯状态

    controlCenter.showGreenLight(); //显示绿灯

  }

}

6、说明:

AState的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为。

B我们可以看到,灯状态的改变是有控制中心来控制,通过显示不同的灯,实现了交通的正常运转。

C:因此当有状态切换这种事情要处理时,我们就可以用State这种模式了。

 

 




相关文章

相关软件