際際滷

際際滷Share a Scribd company logo
GoFのデザインパタ`ン
 Stateパタ`ン
        2013/03/01┰陦
                卅儲i
云晩のアジェンダ
?デザインパタ`ンとは
?Stateパタ`ンの醤悶箭
?Stateパタ`ンのメリット
?デザインパタ`ンの廣吭泣
デザインパタ`ンとは

狛肇のソフトウェア譜柴宀がkし
、潦したOノウハウを們eし、
兆念をつけ、壅旋喘しやすいように
蒙協のシsに惄辰謄タログ晒したもので
ある。
              敬庄一庄沿艶糸庄温より
狛肇のソフトウェア譜柴宀
狛肇のソフトウェア譜柴宀




       Gang of Four
  ┘ャング?オブ?フォ`、膨繁M
Stateパタ`ンの醤悶箭サンプル

PLAY、STOP、PAUSEという彜Bがある

光彜Bで蒙協のコマンドをg佩したr、
`う咾鬚垢襯廛蹈哀薀爐鰈撹する。
if猟で蛍瓷させると???
// コマンドqを鞭け函った栽
if (s.equals("q")) {
     if (mState == STATE_PLAY) {
         System.out.println("STATE_PLAY:q");
     } else if (mState == STATE_STOP) {
         System.out.println("STATE_STO::q");
     } else if (mState == STATE_PAUSE) {
         System.out.println("STATE_PAUSE:q");
     }
}
if猟で蛍瓷させると???
// コマンドwを鞭け函った栽
if (s.equals("w")) {
     if (mState == STATE_PLAY) {
         System.out.println("STATE_PLAY:w");
     } else if (mState == STATE_STOP) {
         System.out.println("STATE_STOP:w");
     } else if (mState == STATE_PAUSE) {
         System.out.println("STATE_PAUSE:w");
     }
}
if猟で蛍瓷させると???
// コマンドeを鞭け函った栽
if (s.equals("e")) {
     if (mState == STATE_PLAY) {
         System.out.println("STATE_PLAY:e");
     } else if (mState == STATE_STOP) {
         System.out.println("STATE_STOP:e");
     } else if (mState == STATE_PAUSE) {
         System.out.println("STATE_PAUSE:e");
     }
}
さぁ勸隻ども、
碧弖紗のおrgだ
さぁ勸隻ども、
碧弖紗のおrgだ

コマンド ̄r ̄も弖紗な。
☆畠何の彜Bで。
そしてこうなる
// コマンドrを鞭け函った栽
if (s.equals("r")) {
     if (mState == STATE_PLAY) {
         System.out.println("STATE_PLAY:r");
     } else if (mState == STATE_STOP) {
         System.out.println("STATE_STOP:r");
     } else if (mState == STATE_PAUSE) {
         System.out.println("STATE_PAUSE:r");
     }
}
浪べ勸隻ども、
また碧弖紗だ。。
浪べ勸隻ども、
また碧弖紗だ。。

彜BRECを弖紗な
☆畠何のコマンドで
浪べ勸隻ども、
また碧弖紗だ。。

彜BRECを弖紗な
☆畠何のコマンドで
彜蓑〜コマンド蛍の蛍瓷がk伏???




    if猟仇zの
   鳥_けである。
そんなときにStateパタ`ン

彜BをクラスとしてO。
そんなときにStateパタ`ン

彜BをクラスとしてO。

オブジェクトの彜Bに鬉犬董
咾笋┐栽に嗤拭
皆岳温岳艶パタ`ンのクラス
彜Bに鬉犬Interfaceを喘吭

public interface State {
  void func_q();
  void func_w();
  void func_e();
  void func_r();
}
Interfaceをg廾する彜Bクラス恬撹
public class PlayState implements State {
    public void func_q(){
          System.out.println("STATE_PLAY:q");
    }
    public void func_w() {
          System.out.println("STATE_PLAY:w");
    }
    public void func_e() {
          System.out.println("STATE_PLAY:e");
    }
    public void func_r() {
          System.out.println("STATE_PLAY:r");
    }
}                                      StopやPauseも揖に、
                              StateのInterfaceをg廾します。
彜Bによって、
オブジェクトを俳り紋える

State state = null;
if (n == STATE_PLAY) {
    state = new PlayState();
} else if (n == STATE_STOP) {
    state = new StopState();
} else if (n == STATE_PAUSE) {
    state = new PauseState();
}
あとはメソッドを柵ぶだけ
// コマンドに鬉犬I尖をg佩
if (s.equals("q")) {
    state.func_q();
}
if (s.equals("w")) {
    state.func_w();
}
if (s.equals("e")) {
    state.func_e();
}
Stateパタ`ンのメリット

?コマンドや彜Bの弖紗で屡贋に唹ない。

?I尖の俐屎は光Stateクラスで]じる。

?コ`ドの宥しが措くなる。

    唹譴富ないので、
    デバッグ垢方がp辛嬬。
      隠便來の鯢蓮
デザインパタ`ンの廣吭泣

o尖に秘しない。

Stateパタ`ン聞う鯵カッコイイ(???)
みたいなノリで、聞うのはNG。

あくまでオブジェクトの彜Bに鬉犬董
咾笋┐栽に嗤拭

More Related Content

Gofのデザインパタ`ン stateパタ`ン