设计模式(二十一) 状态模式

来源:互联网 发布:广州网络推广公司 编辑:程序博客网 时间:2024/04/28 16:56

状态模式也是一种行为型模式,当我们的程序中需要一些状态转换,对于不同的状态需要不同的行为时,我们就可以考虑使用状态模式。

下面用交通灯来当例子。我们需要红黄绿三种颜色的状态。

interface State {    void show();}class RedState implements State {    @Override    public void show() {        System.out.println("交通灯变红了");    }}class YellowState implements State {    @Override    public void show() {        System.out.println("交通灯变黄了");    }}class GreenState implements State {    @Override    public void show() {        System.out.println("交通灯变绿了");    }}

然后需要交通灯,它作为状态类的环境,内部应该有所有状态类的实例,并能按照某种规则转换状态。

public class TrafficLight {    private State redState = new RedState();    private State yellowState = new YellowState();    private State greenState = new GreenState();    private State current = greenState;    public void turn() {        if (current == greenState) {            current = yellowState;            current.show();        } else if (current == yellowState) {            current = redState;            current.show();        } else {            current = greenState;            current.show();        }    }}

然后客户类不需要关心内部状态的变化,就可以使用状态类了。

    public void run() {        TrafficLight light = new TrafficLight();        light.turn();        light.turn();        light.turn();        light.turn();    }
0 0
原创粉丝点击