设计模式之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这种模式了。
“小朋友过马路,左右看,红灯停,绿灯行,阿姨夸我是乖宝宝。”,我给女儿念着儿歌,突然女儿问我,什么是红绿灯啊?为了给她说清楚,我特意带她看我们家附近的交通灯(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这种模式了。
相关文章推荐
- (原创)无废话C#设计模式之十六:State
- 设计模式之State——交通篇
- Android与设计模式——状态(State)模式
- (9)设计模式:State
- C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
- [设计模式](十二):备忘录模式(Memento)|状态模式(State) - (两种类状态行为模式)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式之7 command模式和state模式,调停者模式,门面模式
- 设计模式(十七)之State
- 设计模式 ( 十七) 状态模式State(对象行为型)
- Java设计模式 状态模式(State)
- state设计模式--学习总结--state设计模式和策略设计模式的区别
- java设计模式学习2--Factory Pattern[原创]
- 设计模式初探-状态模式(STATE)别名状态对象(Objects for States)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 实战设计模式系列-State(状态)
- 设计模式 笔记 状态模式 State
- 设计模式之Iterator——点名篇(原创)
- 设计模式之Strategy——简历篇(原创)
- 读书笔记_java设计模式深入研究 第八章 状态模式 State