状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式Demo:
/**
* 2018年3月30日下午9:42:50
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestState {
/**
* @param args
*/
public static void main(String[] args) {
Context context = new Context();
context.operate();
context.operate();
context.operate();
context.operate();
context.operate();
context.operate();
context.operate();
context.operate();
}
}
//抽象汽车状态
interface CarState{
public void run(Context context);
}
//停车状态
class CarStop implements CarState{
@Override
public void run(Context context) {
System.out.println("停止状态,开始加速");
context.setCarState(new CarSpeedUp());
}
}
//加速状态
class CarSpeedUp implements CarState{
@Override
public void run(Context context) {
System.out.println("加速状态,进入匀速行驶");
context.setCarState(new CarRun());
}
}
//行驶状态
class CarRun implements CarState{
@Override
public void run(Context context) {
System.out.println("匀速状态,开始减速");
context.setCarState(new CarSpeedDown());
}
}
//减速状态
class CarSpeedDown implements CarState{
@Override
public void run(Context context) {
System.out.println("减速状态,停车");
System.out.println("=============");
context.setCarState(new CarStop());
}
}
class Context{
private CarState carState;//维护一个状态
public Context() {
carState = new CarStop();
}
public CarState getCarState() {
return carState;
}
public void setCarState(CarState carState) {
this.carState = carState;
}
public void operate() {
System.out.print("操作>>>");
carState.run(this);
}
}
结果: