11.3

liuxuechao發表於2024-11-20

狀態模式

當涉及狀態模式的示例時,我們可以以一個簡單的交通訊號燈系統為例。在這個示例中,我們有三種狀態:紅燈、綠燈和黃燈。根據當前狀態的不同,交通訊號燈將採取不同的行為。

首先,我們需要定義一個狀態介面,表示交通訊號燈的狀態:

// 狀態介面
public interface TrafficLightState {
    void display();
}

然後,我們可以實現具體的狀態類,例如紅燈狀態、綠燈狀態和黃燈狀態:

// 紅燈狀態
public class RedLightState implements TrafficLightState {
    @Override
    public void display() {
        System.out.println("紅燈停");
    }
}

// 綠燈狀態
public class GreenLightState implements TrafficLightState {
    @Override
    public void display() {
        System.out.println("綠燈行");
    }
}

// 黃燈狀態
public class YellowLightState implements TrafficLightState {
    @Override
    public void display() {
        System.out.println("黃燈等待");
    }
}

接下來,我們需要一個上下文類來維護當前的狀態,並根據狀態的變化呼叫相應的行為:

// 交通訊號燈上下文類
public class TrafficLightContext {
    private TrafficLightState state;

    public TrafficLightContext() {
        // 初始狀態為紅燈
        state = new RedLightState();
    }

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

    public void displayState() {
        state.display();
    }
}

最後,我們可以建立一個簡單的示例來演示狀態模式的使用:

public class Main {
    public static void main(String[] args) {
        TrafficLightContext context = new TrafficLightContext();

        context.displayState(); // 當前狀態為紅燈

        context.setState(new GreenLightState());
        context.displayState(); // 當前狀態為綠燈

        context.setState(new YellowLightState());
        context.displayState(); // 當前狀態為黃燈
    }
}

相關文章