1. 程式人生 > >設計模式-狀態模式(State)

設計模式-狀態模式(State)

狀態模式是行為模式的一種,狀態模式允許改變物件內部狀態來改變物件的行為。

角色和職責:

1.上下文(Context)-Order

   擁有內部的狀態

2.狀態介面(Status)-State:

    一個所有具體狀態的共同介面;任何狀態都實現這個相同的介面,這樣一來狀態之間可以互相替換

3.具體狀態(Concrete State)-:

   

UML圖:

 

具體原始碼:

 

/**
 * 狀態介面類
 */
public abstract class State {
    
protected int owner_order_status = 0;//當前狀態物件的具體狀態 protected State next_state;//當前狀態的下一個狀態 public State(int owner_order_status,State next_state){ this.owner_order_status = owner_order_status; this.next_state = next_state; } /** * 處理 * @param orderStatus */ protected
void handler(int orderStatus){ if(!isOwner(owner_order_status,orderStatus)){ if(next_state != null){ //非當前物件,繼續到下一個物件中查詢 next_state.handler(orderStatus); return; } System.out.println("當前訂單狀態未定義");
return; } diaplay(); } /** * 是否當前物件 * @return */ public boolean isOwner(int owner_order_status,int orderStatus){ if(owner_order_status == orderStatus){ return true; } return false; } abstract void diaplay(); }

 

/**
 * 訂單建立
 */
public class OrderCreateState extends State
{
    public OrderCreateState(int owner_order_status, State next_state) {
        super(owner_order_status, next_state);
    }

    @Override
    void diaplay() {
        System.out.println("訂單建立");
    }
}
/**
 * 訂單支付
 */
public class OrderPayState extends State {

    public OrderPayState(int owner_order_status, State next_state) {
        super(owner_order_status, next_state);
    }

    @Override
    void diaplay() {
        System.out.println("訂單支付");
    }
}
/**
 * 訂單完成
 */
public class OrderSuccessState extends State{
    public OrderSuccessState(int owner_order_status, State next_state) {
        super(owner_order_status, next_state);
    }

    @Override
    void diaplay() {
        System.out.println("訂單完成");
    }
}
/**
 * 訂單狀態關閉
 */
public class OrderCloseState extends State{
    public OrderCloseState(int owner_order_status, State next_state) {
        super(owner_order_status, next_state);
    }

    @Override
    void diaplay() {
        System.out.println("訂單狀態關閉");
    }
}
/**
 * 訂單
 */
public class Order {
    private State orderState;
    public Order(){
        orderState = new OrderCreateState(1,
                new OrderPayState(2,
                        new OrderSuccessState(3,
                                new OrderPayState(4,null))));
    }

    public State getOrderState() {
        return orderState;
    }
}
public class Main {
    public static void main(String[] args) {
        Order order = new Order();
        State orderState = order.getOrderState();
        orderState.handler(1);//訂單建立
        orderState.handler(2);//訂單支付
        orderState.handler(3);//訂單完成
        orderState.handler(4);//訂單關閉
        orderState.handler(5);//訂單未定義
    }
}

結果:

訂單建立
訂單支付
訂單完成
訂單支付
當前訂單狀態未定義

 

原始碼地址:https://github.com/qjm201000/design_pattern_state.git