0-前言
状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类;
1-实现
1-1、简单UML图
1-2、代码实现
//1、状态抽象父类abstract class State{ public String StateName; public abstract void Handle(Contex contex);}//2-1、具体状态Aclass StateStop extends State{ public StateStop() { StateName = "停止状态"; //当前状态 } @Override public void Handle(Contex contex) { contex.setState(new StateStart() ); //设置下一个状态 }}//2-2、具体状态Bclass StateStart extends State{ public StateStart() { StateName = "开动状态"; //当前撞他 } @Override public void Handle(Contex contex) { contex.setState(new StateStop()); //设置下一个状态 }}//3、上下文类class Contex{ private State state; public Contex( State _state) { this.state = _state; } //1、设置状态 public void setState(State st) { System.out.println("************当前状态为:"+state.StateName); this.state = st; System.out.println("状态变更为:"+state.StateName); } //2、执行方法 public void Request() { state.Handle(this); }
客户端:
Contex ct = new Contex(new StateStart()); ct.Request(); ct.Request(); ct.Request();
运行结果:
2-应用场景简单总结
1、当对象的行为取决于它的状态,且必须在运行时根据状态来改变自己的行为时;
2、当一个操作对象含大量多分支条件语句,且这些分支依赖该对象的状态时;
无废话设计模式(14)结构型模式bsci 认证、 平台助力,政企携手,开创互联网+时代、 一天玩转Cdiscount平台、 亚马逊问答Q&A、 转运中国、 图文解说:跨境支付有哪些结算方式?、 南澳怎么去西冲?南澳到西冲怎么去?、 怎么买连号的动车票?自动售票那里连着买就是连号吗?、 小孩子坐和谐号怎么买票的?一张身份证能买两张票吗?、
没有评论:
发表评论