Java 设计模式-模板方法模式(Template Method)
Java 设计模式-简单工厂(Simple Factory)
Java 设计模式-工厂方法(Factory Method)
Java 设计模式-策略模式(Strategy Pattern)
Java 设计模式-命令模式(Command Pattern)
状态模式(State Pattern)是对象行为模式的一种;它的意图是:允许一个对象在其内部状态改变的时改变它的行为。
主要角色有:
context(环境),State(抽象的状态角色),ConcreteState(真实的状态角色)
状态模式使用的场景:
- 一个对象的行为依赖于它所处于的状态,对象的行为必须随着其状态的改变而改变
- 对象在某个方法中依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句你的每一个分支都包装到一个独立的类中。使得这些条件转移语句能够以类的形式独立的存在和演进。
交通灯的状态有:红灯,黄灯和绿灯。
交通灯的状态是会改变的,所以抽象的状态有一个操作就是改变状态
/**
* 状态机的接口
* @author zhangwei_david
* @version $Id: RedState.java, v 0.1 2015年1月12日 下午8:34:04 zhangwei_david Exp $
*/
public interface State {
/**
* 装填的装换
*
* @return
*/
public State change();
}
/**
*交通灯的状态机
* @author zhangwei_david
* @version $Id: ColorState.java, v 0.1 2015年1月12日 下午8:35:55 zhangwei_david Exp $
*/
public enum TrafficLightState implements State {
RED {
/**
* @see com.cathy.demo.enumDemo.TrafficLightState#change()
*/
@Override
public State change() {
// 红灯转换为绿灯
return GREEN;
}
},
GREEN {
/**
* @see com.cathy.demo.enumDemo.TrafficLightState#change()
*/
@Override
public State change() {
// 绿灯转换为黄灯
return YELLOW;
}
},
YELLOW {
/**
* @see com.cathy.demo.enumDemo.TrafficLightState#change()
*/
@Override
public State change() {
// 黄灯转换为红灯
return RED;
}
};
/**
* @see com.cathy.demo.enumDemo.State#change()
*/
public abstract State change();
}
/**
*
* @author zhangwei_david
* @version $Id: Client.java, v 0.1 2015年1月12日 下午8:48:51 zhangwei_david Exp $
*/
public class Client {
/**
*
* @param args
*/
public static void main(String[] args) {
State state = TrafficLightState.GREEN;
state = state.change();
System.out.println(state);
state = state.change();
System.out.println(state);
state = state.change();
System.out.println(state);
state = state.change();
System.out.println(state);
state = state.change();
System.out.println(state);
}
}
结果是:
YELLOW
RED
GREEN
YELLOW
RED