第0章:簡介
狀態模式定義:允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類。
狀態模式本質:根據狀態來分離和選擇行爲
參考:研磨設計模式(書籍),大話設計模式(書籍)
模式圖:
待補充
第1章:實踐
(1)狀態接口(State.java)
package com.mcc.core.designPattern.behavior.state; /** * 狀態接口 * * 狀態模式的定義:允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類。 * 狀態模式的本質:根據狀態來分離和選擇行爲 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:36 */ public interface State { /** * 狀態對應的處理 */ public void handle(); } |
(2)狀態A(StateImplA.java)
package com.mcc.core.designPattern.behavior.state; /** * 狀態A * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplA implements State{ /** * 狀態對應的處理 */ @Override public void handle() { System.out.println("狀態A處理操作"); } } |
(3)狀態B(StateImplB.java)
package com.mcc.core.designPattern.behavior.state; /** * 狀態B * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplB implements State{ /** * 狀態對應的處理 */ @Override public void handle() { System.out.println("狀態B處理操作"); } } |
(4)狀態C(StateImplC.java)
package com.mcc.core.designPattern.behavior.state; /** * 狀態C * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplC implements State{ /** * 狀態對應的處理 */ @Override public void handle() { System.out.println("狀態C處理操作"); } } |
(5)上下文(Context.java)
package com.mcc.core.designPattern.behavior.state; /** * 上下文,維護狀態對象 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:39 */ public class Context { //持有狀態對象 private State state; /** * 設置狀態對象 * @param state */ public void setState(State state){ this.state = state; } /** * 處理用戶感興趣的接口方法 */ public void request(){ //處理中可能調用狀態對象的方法來處理,這裏可以加入其它操作 state.handle(); } } |
(6)客戶端測試(Client.java)
package com.mcc.core.designPattern.behavior.state; /** * 客戶端測試 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:44 */ public class Client { public static void main(String args[]){ //初始化各狀態對象 State stateA = new StateImplA(); State stateB = new StateImplB(); State stateC = new StateImplC(); //上下文對象 Context context = new Context(); //註冊狀態A context.setState(stateA); context.request(); //註冊狀態B context.setState(stateB); context.request(); //註冊狀態C context.setState(stateC); context.request(); } } |