设计模式-状态模式

状态模式(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、付费专栏及课程。

余额充值