為什麼大部分的Android開發成為不了架構師
阿新 • • 發佈:2021-08-10
1、簡介
定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
狀態模式允許一個物件在其內部狀態改變時改變其行為,這個物件看上去就像改變了他的類一樣
2、狀態模式類圖
3、狀態模式涉及到的角色
從上圖可以看出 狀態模式涉及到以下幾個角色
3.1、抽象狀態(State)角色:定義一個介面,用以封裝環境物件的一個特定的狀態所對應的行為
3.2、具體狀態(ConcreteState)角色:每一個具體狀態類都實現了環境的一個狀態所對應的行為
3.3、環境(Context)角色:環境角色持有一個狀態類的例項,這個狀態類的例項給出環境物件的現有狀態
4、原始碼
4.1、抽象狀態角色
package State; /** * ******************************************************** * @ClassName: State * @Description: 抽象狀態介面 *********************************************************** */ public interface State { String SimpleOperation(); }
4.2、具體狀態角色1
package State; /** * ******************************************************** * @ClassName: ConcreteState * @Description: 具體狀態類 *********************************************************** */ public class Sit implements State{ @Override public String SimpleOperation() { return "我坐下了"; } }
4.3、具體狀態角色2
package State; /** * ******************************************************** * @ClassName: Stand * @Description: 具體狀態類 *********************************************************** */ public class Stand implements State{ @Override public String SimpleOperation() { return "我站起來了"; } }
4.4、環境角色
package State; /** * ******************************************************** * @ClassName: Context * @Description:環境類 環境類持有一個State物件 並把所有的行為委派給此物件 *********************************************************** */ public class Context { private State state; public State getState() { return state; } public void setState(State state) { this.state = state; } public String stateManage(){ return state.SimpleOperation(); } }
4.5、測試客戶端
package State; /** * ******************************************************** * @ClassName: Client * @Description: 狀態模式測試客戶端 *********************************************************** */ public class Client { public static void main(String[] args) { Context context = new Context(); context.setState(new Sit()); System.out.println(context.stateManage()); context.setState(new Stand()); System.out.println(context.stateManage()); } }