設計模式-狀態模式(State)
阿新 • • 發佈:2018-12-13
狀態模式是行為模式的一種,狀態模式允許改變物件內部狀態來改變物件的行為。
角色和職責:
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 */ protectedvoid 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