設計模式——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)設計模式
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式之狀態模式---State Pattern設計模式
- C#設計模式系列:狀態模式(State)C#設計模式
- 設計模式--狀態模式State(行為型)設計模式
- JAVA設計模式之 狀態模式【State Pattern】Java設計模式
- 狀態模式(State)模式
- 【設計模式基礎】行為模式 - 8 -狀態(State)設計模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 狀態模式(State pattern)模式
- 設計模式20之狀態模式設計模式
- 23種設計模式 之 State模式(狀態模式)[C語言實現]設計模式C語言
- 轉載---Dephi狀態模式(State模式)模式
- 設計模式-狀態模式設計模式
- 設計模式:狀態模式設計模式
- 設計模式(十五)狀態模式設計模式
- 設計模式之——狀態模式設計模式
- javascript設計模式狀態模式JavaScript設計模式
- 設計模式(六):狀態模式設計模式
- PHP 設計模式之狀態模式PHP設計模式
- 簡說設計模式——狀態模式設計模式
- python設計模式狀態模式Python設計模式
- 極簡設計模式-狀態模式設計模式
- GoLang設計模式14 - 狀態模式Golang設計模式
- Python設計模式-狀態模式Python設計模式
- Java設計模式之狀態模式Java設計模式
- 設計模式系列之「狀態模式」設計模式
- .NET下的狀態(State)模式 ------行為型模式模式
- 使用C# (.NET Core) 實現狀態設計模式 (State Pattern)C#設計模式
- 詳解 state 狀態模式及在 C++ 設計模式程式設計中的使用例項C++設計模式程式設計
- 23種設計模式(七)-狀態設計模式設計模式
- 設計模式第八講-狀態模式設計模式
- 設計模式漫談之狀態模式設計模式
- python設計模式【9】-狀態模式Python設計模式
- 《Head First 設計模式》:狀態模式設計模式
- C#設計模式之狀態模式C#設計模式
- 設計模式系列9--狀態模式設計模式
- 設計模式系列之十二狀態模式設計模式