关于java:状态模式

状态模式的定义是容许对象通过扭转其状态的形式扭转它的行为。

状态模式中有以下几种角色

  • 上下文类:用于记录状态、批改状态,行为的调用等

形象状态类:所有用于示意同一类状态的类的父类,并定义了一个行为接口

具体状态类:不同状态的具体实现

上面是应用状态模式对一个打印机行为的一种实现。

上下文类

public class PrinterContext {
    private PrinterState state;

    public PrinterContext(PrinterState state) {
        this.state = state;
    }

    public PrinterState getState() {
        return state;
    }

    public void setState(PrinterState state) {
        this.state = state;
    }

    public void handle(){
        state.handle(this);
    }
}

形象状态类

public interface PrinterState {
    void handle(PrinterContext context);
}

具体状态类

public class OccupyState implements PrinterState {
    @Override
    public void handle(PrinterContext context) {
        System.out.println("打印机正在被占用....");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            System.out.println("打印完结,转为闲暇模式");
            context.setState(new IdleState());
        }
    }
}
public class IdleState implements PrinterState {

    @Override
    public void handle(PrinterContext context) {
        System.out.println("打印机闲暇中.....");
    }
}

测试类

public class StateTest {
    @Test
    public void test(){
        PrinterState occupyState = new OccupyState();
        PrinterContext context = new PrinterContext(occupyState);
        context.handle();
    }
}
=====后果=====
打印机正在被占用....
打印完结,转为闲暇模式

状态模式和策略模式很像,用上面的两个时序图很容易看出两者的一些差别。

https://blog.csdn.net/ruangon…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理