状态模式代码

来源:互联网 发布:淘宝主营占比在哪里看 编辑:程序博客网 时间:2024/04/26 21:32
package com.it;public class Dianti {/*1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。*///3个状态     // 4个方法/*关门运行   关门暂停关门暂停   开门暂停  关门运行开门暂停   关门暂停 *///当前状态public static CloseStopState closeStopState=new CloseStopState();public static OpenStopState openStopState=new OpenStopState();public static CloseRunState closeRunState=new CloseRunState();  State state;  public Dianti(State state) {  this.state=state;  this.state.setDianti(this);}public void close() { //根据状态动态 改变方法内容  允许一个对象在其内部状态改变时改变它的行为。  对象看起来似乎修改了它的类//如果开门暂停状态  OK//如果关门运行状态 //关门暂停状态  //当前状态.close()state.close();}public void open() {//如果开门暂停状态  //如果关门运行状态 //关门暂停状态   OK//当前状态.open()state.open();}public void run() {//如果开门暂停状态  //如果关门运行状态 //关门暂停状态   OK//当前状态.run()state.run();}public void stop() {//如果开门暂停状态  //如果关门运行状态 OK//关门暂停状态   //当前状态.stop()state.stop();}public State getState() {return state;}public void setState(State state) {this.state = state;this.state.setDianti(this);}public static void main(String[] args) {/*Dianti d=new Dianti(new CloseStopState()); //开始关闭暂停状态 new d.close();package com.it;public class CloseRunState  extends State {    @Override    public void close() {        System.out.println("按错了 什么也不做");     }    @Override    public void open() {        System.out.println("按错了 什么也不做");     }    @Override    public void run() {        System.out.println("按错了 什么也不做");     }    @Override    public void stop() {        System.out.println("暂停"); //切换到暂停状态        //this.dianti.setState(new CloseStopState());        this.dianti.setState(dianti.closeStopState);    }}package com.it;public class CloseStopState extends State {    @Override    public void close() {        System.out.println("按错了 什么也不做");     }    @Override    public void open() {        System.out.println("开门"); //切换到开门状态        //this.dianti.setState(new OpenStopState());        this.dianti.setState(dianti.openStopState);    }    @Override    public void run() {        System.out.println("运行");    //    this.dianti.setState(new CloseRunState());        this.dianti.setState(dianti.closeRunState);    }    @Override    public void stop() {        System.out.println("按错了 什么也不做");     }}package com.it;//开门状态  只能关门动作public class OpenStopState extends State {    @Override    public void close() {        System.out.println("关门");//切换到关门状态    //    this.dianti.setState(new CloseStopState() );        this.dianti.setState(dianti.closeStopState);    }    @Override    public void open() {        System.out.println("按错了 什么也不做");     }    @Override    public void run() {        System.out.println("按错了 什么也不做");     }    @Override    public void stop() {        System.out.println("按错了 什么也不做");     }}package com.it;public abstract class State {        Dianti dianti;    public abstract void close() ;    public abstract void open();    public abstract void run() ;    public abstract void stop() ;    public Dianti getDianti() {        return dianti;    }    public void setDianti(Dianti dianti) {        this.dianti = dianti;    }            }d.stop();d.run();d.stop();d.open();*///Dianti不用关心状态。直接调用方法。就可以使用正确的方法 自动切换状态和对应状态下的方法    Dianti d=new Dianti(Dianti.closeStopState); // 初始化状态 开始关闭暂停状态  不newd.close();//错误方法d.stop();//错误方法d.open();d.close();d.run();d.stop();d.close();//错误方法d.run();}}


0 0