鍍金池/ 教程/ Java/ Java狀態(tài)模式
Java前端控制器模式
Java工廠設(shè)計(jì)模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對(duì)象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計(jì)模式
Java空對(duì)象模式
Java數(shù)據(jù)訪問對(duì)象模式
Java訪問者模式
Java組合實(shí)體模式
Java服務(wù)定位器模式

Java狀態(tài)模式

在狀態(tài)模式中,類行為根據(jù)其狀態(tài)而改變。 這種設(shè)計(jì)模式屬于行為模式。
在狀態(tài)模式中,我們創(chuàng)建表示各種狀態(tài)的對(duì)象,以及隨狀態(tài)對(duì)象變化而行為變化的上下文對(duì)象。

實(shí)現(xiàn)

我們將創(chuàng)建一個(gè)State接口來定義一個(gè)動(dòng)作并實(shí)現(xiàn)State接口的具體狀態(tài)類。Context是一個(gè)載有一個(gè)狀態(tài)的類。

演示類StatePatternDemo將使用Context和狀態(tài)對(duì)象來演示上下文行為基于它所處的狀態(tài)類型的變化。

第1步:創(chuàng)建一個(gè)接口,State.java -

public interface State {
   public void doAction(Context context);
}

第2步:創(chuàng)建實(shí)現(xiàn)相同接口的具體類。StartState.java -

public class StartState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in start state");
      context.setState(this);    
   }

   public String toString(){
      return "Start State";
   }
}

文件:StopState.java -

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);    
   }

   public String toString(){
      return "Stop State";
   }
}

第3步:創(chuàng)建 Context 類,Context.java -

public class Context {
   private State state;

   public Context(){
      state = null;
   }

   public void setState(State state){
      this.state = state;        
   }

   public State getState(){
      return state;
   }
}

第4步:使用Context查看狀態(tài)更改時(shí)的行為更改。StatePatternDemo.java -

public class StatePatternDemo {
   public static void main(String[] args) {
      Context context = new Context();

      StartState startState = new StartState();
      startState.doAction(context);

      System.out.println(context.getState().toString());

      StopState stopState = new StopState();
      stopState.doAction(context);

      System.out.println(context.getState().toString());
   }
}

第5步:驗(yàn)證輸出結(jié)果 -

Player is in start state
Start State
Player is in stop state
Stop State