Transaction.java

package com.designpatterns.behavioral.state.applied;

public class Transaction {

    private final String id;
    private TransactionState state = new PendingState();

    public Transaction(String id) {
        this.id = id;
    }

    public String id() {
        return id;
    }

    public void startProcessing() {
        state = state.startProcessing();
    }

    public void settle() {
        state = state.settle();
    }

    public void fail() {
        state = state.fail();
    }

    public String status() {
        return state.name();
    }
}