デザインパターンGOF23状態モード

状態モード状態

シーン:状態の複数を有し、頻繁な変更を必要とする、このパターン

- エレベーターの操作:サービス、通常、自動閉鎖、自動ドア、アップランニング、走る、火災の状態

- 交通信号:赤、黄、緑

- ビジネスや政府のシステム:国家文書の承認

- 、オンライン注文の状況買い物をする場合:受注、有給、配信を、領収書はされています

コア:異なる条件の下でシステム状態の変換と複雑なオブジェクトの振る舞いを解決するためのパッケージングの問題

構造:コンテキスト環境コンテキスト(状態オブジェクトを維持することは、現在の状態を定義)、抽象クラスの状態の状態、状態ConcreteState具象クラス(各クラスは、行動に対応する状態をカプセル化)

一般的なシナリオを開発します:

- 国家の銀行口座で管理システム

状態の-OA文書管理システム

- ホテルシステム、部屋の状態管理

- 各スレッドのオブジェクトの状態を切り替えます

例:別のホテルの部屋の状態

状態マップ

 

パブリックインターフェイスの状態{
  無効ハンドラ();
}
クラスFreeStateは状態{実装
 @Override
 公共ボイドハンドラ(){
  System.out.printlnは( "空闲房间、可入住")。
 }
}
予約されたクラスは、状態{実装
 @Override
 公共ボイドハンドラ(){
  System.out.printlnは( "已は预定")。
 }
}
チェッククラスは、状態{実装
 @Override
 公共ボイドハンドラ(){
  System.out.printlnは( "已入住を")。
 }
}

/ **
 *コンテキストクラス
 *ルーム
 *の@author帆入るコード
 *
 * /
パブリッククラスRoomContext {  
  プライベート状態状態;
  ます。public void SETSTATE(状態S){
   ステート=のS;
   System.out.printlnは( "!変更状態") ;
   state.handler();
  }
}

パブリッククラスクライアント{
 パブリック静的無効メイン(文字列[] args){
   RoomContext RC =新しいRoomContext()。
   rc.setState(新しいFreeState());
   rc.setState(新しい予約されました());
 }
}

おすすめ

転載: www.cnblogs.com/code-fun/p/11366145.html