public class Context {
public final static int PREVIEW_MODE = 0;
public final static int EDIT_MODE = 1;
private IState currentState;
public void changeState(IState state) {
this.currentState = state;
}
public void dowork(int mode){
System.out.println("====================================");
this.currentState.convertState(this, mode);
this.currentState.add(this);
this.currentState.modify(this);
this.currentState.save(this);
this.currentState.view(this);
System.out.println("====================================");
}
}
public interface IState {
public void convertState(Context context,int mode);public void save(Context context);
public void modify(Context context);
public void add(Context context);
public void view(Context context);
}
public class EditState implements IState {
@Override
public void add(Context context) {
System.out.println("编辑模式【新增】");
}
@Override
public void convertState(Context context, int mode) {
if(mode == Context.PREVIEW_MODE){
context.changeState(new PreviewState());
}
}
@Override
public void modify(Context context) {
System.out.println("编辑模式【修改】");
}
@Override
public void save(Context context) {
System.out.println("编辑模式【保存】");
}
@Override
public void view(Context context) {
System.out.println("编辑模式【查看】");
}
}
public class PreviewState implements IState {
@Override
public void add(Context context) {
System.out.println("预览模式【不能新增】");
}
@Override
public void convertState(Context context, int mode) {
if(mode == Context.EDIT_MODE){
context.changeState(new EditState());
}
}
@Override
public void modify(Context context) {
System.out.println("预览模式【不能修改】");
}
@Override
public void save(Context context) {
System.out.println("预览模式【不能保存】");
}
@Override
public void view(Context context) {
System.out.println("预览模式【查看】");
}
}
测试
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.changeState(new EditState());
Random ran = new Random();
for (int i = 0; i < 5; i++) {
int r = ran.nextInt(2);
System.out.println("当前模式:"+((r==0)?"预览模式":"编辑模式"));
context.dowork(r);
}
}
}