設計模式——20狀態模式(State)
20、狀態模式(State)
核心思想就是:當物件的狀態改變時,同時改變其行為,很好理解!就拿QQ來說,有幾種狀態,線上、隱身、忙碌等,每個狀態對應不同的操作,而且你的好友也能看到你的狀態,所以,狀態模式就兩點:1、可以通過改變狀態來獲得不同的行為。2、你的好友能同時看到你的變化。
State類是個狀態類,Context類可以實現切換,我們來看看程式碼:
[java] view plaincopy
- package com.xtfggef.dp.state;
- /**
-
- 狀態類的核心類
-
- 2012-12-1
-
- @author erqing
-
- */
- public class State {
- private String value;
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- public void method1(){
- System.out.println(“execute the first opt!”);
- }
- public void method2(){
- System.out.println(“execute the second opt!”);
- }
- }
[java] view plaincopy - package com.xtfggef.dp.state;
- /**
-
- 狀態模式的切換類 2012-12-1
-
- @author erqing
-
- */
- public class Context {
- private State state;
- public Context(State state) {
- this.state = state;
- }
- public State getState() {
- return state;
- }
- public void setState(State state) {
- this.state = state;
- }
- public void method() {
- if (state.getValue().equals(“state1”)) {
- state.method1();
- } else if (state.getValue().equals(“state2”)) {
- state.method2();
- }
- }
- }
測試類:
[java] view plaincopy
- public class Test {
- public static void main(String[] args) {
- State state = new State();
- Context context = new Context(state);
- //設定第一種狀態
- state.setValue(“state1”);
- context.method();
- //設定第二種狀態
- state.setValue(“state2”);
- context.method();
- }
- }
輸出:
execute the first opt!
execute the second opt!
根據這個特性,狀態模式在日常開發中用的挺多的,尤其是做網站的時候,我們有時希望根據物件的某一屬性,區別開他們的一些功能,比如說簡單的許可權控制等。
相關文章
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式之狀態模式(State)設計模式
- 設計模式20之狀態模式設計模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 設計模式:狀態模式設計模式
- 設計模式-狀態模式設計模式
- python設計模式狀態模式Python設計模式
- 設計模式(十五)狀態模式設計模式
- 設計模式之——狀態模式設計模式
- PHP 設計模式之狀態模式PHP設計模式
- 《Head First 設計模式》:狀態模式設計模式
- 簡說設計模式——狀態模式設計模式
- 極簡設計模式-狀態模式設計模式
- GoLang設計模式14 - 狀態模式Golang設計模式
- python設計模式【9】-狀態模式Python設計模式
- 使用C# (.NET Core) 實現狀態設計模式 (State Pattern)C#設計模式
- 23種設計模式(七)-狀態設計模式設計模式
- 設計模式第八講-狀態模式設計模式
- C#設計模式之狀態模式C#設計模式
- 設計模式漫談之狀態模式設計模式
- 設計模式--直譯器模式和狀態模式設計模式
- 折騰Java設計模式之狀態模式Java設計模式
- Unity【話大】設計模式之狀態模式Unity設計模式
- 用設計模式去掉沒必要的狀態變數 —— 狀態模式設計模式變數
- 行為型設計模式 - 狀態模式詳解設計模式
- 無廢話設計模式(14)結構型模式--狀態模式設計模式
- 設計模式(二十一)----行為型模式之狀態模式設計模式
- 《設計模式七》備忘錄、模板方法、狀態模式及設計模式設計總結設計模式
- 設計模式之狀態模式(三分鐘學會一個設計模式)設計模式
- 《JavaScript設計模式與開發實踐》模式篇(13)—— 狀態模式JavaScript設計模式
- 軟體設計模式系列之二十二——狀態模式設計模式
- 軟體設計模式學習(二十四)狀態模式設計模式
- State設計模式上篇(理論篇)設計模式
- GoLang設計模式20 - 組合模式Golang設計模式
- 設計模式學習筆記(二十)狀態模式及其實現設計模式筆記
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- Java進階篇設計模式之十二 ---- 備忘錄模式和狀態模式Java設計模式
- 設計模式-靜態工廠模式設計模式
- 行為型模式:狀態模式模式