设计模式-状态模式

状态模式(State Pattern)
当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了。

举例:Word文本编辑器的两种模式:编辑模式、预览模式,在编辑模式下可以添加、修改、删除、查看文档,而在预览模式下只能查看文档。

Context类,用于保存当前模式

public class Context {
//预览模式
public static final int PREVIEW_STATE=-1;
//编辑模式
public static final int EDIT_STATE=0;
//当前状态
private IState curState;

public void changeState(IState state){
this.curState=state;
}

public void getCurStateDesc(){
System.out.println("---当前模式:"+(this.curState instanceof EditState?"编辑模式":"预览模式")+"---");
this.curState.add();
this.curState.update();
this.curState.delete();
this.curState.delete();
}
}



public interface IState {
/**
* description 转换状态
* @param context 上下文
* @param state 要转换的状态
*/
public void convertState(Context context,int state);

/**
* description 添加文档
*/
public void add();

/**
* description 修改文档
*/
public void update();

/**
* description 删除文档
*/
public void delete();

/**
* description 查看文档
*/
public void view();
}



public class EditState implements IState{
@Override
public void convertState(Context context, int state) {
if(state==Context.PREVIEW_STATE){
context.changeState(new PreviewState());
}
}

@Override
public void add() {
System.out.println("编辑模式[添加]");
}

@Override
public void update() {
System.out.println("编辑模式[修改]");
}

@Override
public void delete() {
System.out.println("编辑模式[删除]");
}

@Override
public void view() {
System.out.println("编辑模式[查看]");
}
}



public class PreviewState implements IState{
@Override
public void convertState(Context context, int state) {
if(state==Context.EDIT_STATE){
context.changeState(new EditState());
}
}

@Override
public void add() {
System.out.println("预览模式不支持添加");
}

@Override
public void update() {
System.out.println("预览模式不支持修改");
}

@Override
public void delete() {
System.out.println("预览模式不支持删除");
}

@Override
public void view() {
System.out.println("预览模式[查看]");
}
}


测试类

public class Demo {
public static void main(String[] args) {
Context context=new Context();
context.changeState(new EditState());
context.getCurStateDesc();
//切换为预览模式
context.changeState(new PreviewState());
context.getCurStateDesc();
}
}


测试结果

---当前模式:编辑模式---
编辑模式[添加]
编辑模式[修改]
编辑模式[删除]
编辑模式[删除]
---当前模式:预览模式---
预览模式不支持添加
预览模式不支持修改
预览模式不支持删除
预览模式不支持删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值