« ラテックスで手ができました。 | メイン | ついカッとしてやる夫ビューア作った »



やる夫がデザインパターンをやるようです 第13回

やる夫がデザインパターンをやるようです 第13回をはてなブックマークに追加 やる夫がデザインパターンをやるようです 第13回をdel.icio.usに追加  Yahoo!ブックマークに登録 やる夫がデザインパターンをやるようです 第13回をGoogle Bookmarksに追加 やる夫がデザインパターンをやるようです 第13回をtwitterにポスト
≪第12回第14回≫

やる夫見聞録さんにやる夫で学ぶデザインパターンを紹介いただきました。ありがとうございます!
ということで前回の続きです。
     ____ 
   /     \    なんだってアーキテクトとか
  /  _ノ   ヽ_\   エラそうな肩書き持ってるやつは
/    (ー)  (ー)\  出し惜しみばっかするんだお
|       (__人__)   |
/      ∩ ノ)   / 
(  \ / _ノ´.|  |  \ -、 
.\  "  /__|  |   (__丿 
  \ /___ 







   / ̄ ̄\ 
 /   _ノ  \   (まーだごちゃごちゃいってやがる)
 |    ( ●)(●) おめぇが俺の足をひっぱらねぇように
. |     (__人__)  今から調教してやってんだろが
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)









             おいらが足のおまいをひっぱって
             ひっぱるのはおいらがおまいのひっぱりを
             あしだお!!!!!
                    γ ⌒⌒ヽ
   / ̄ ̄\           ( ( ヽ ) ノ
 /_ノ     \     (⌒) 三  ノ 从 ゝ
 ( ●)( ●)  ヽ   三/ | ニ  ____     (⌒)  
. | (__人__) u  }   |  |   /\  / ) し   / |  ミ 
  | ` ⌒´    ノ   !   、 /(○ )::(○ )⌒\/ | ミ
.  |         }    \./:::::::(_人_)::::::::  i'   |
.  ヽ        }      |     )ww)     |  |
   ヽ     ノ   ヘ   \    `ー"      ノ
   /    く 、_/っ/      \ .    .   \
   |     \--一''           \
    |    |ヽ、二⌒)、          \
  わかったわかった








         ____    (よくわかったな)
      / ―  ―\    わかればいいお
     / (●)  (●)\ 
   /    (__人__)   \
   |      ` ⌒´    | 
    \           /
    /          \









        ____ 
      /_ノ   ヽ_\   とりあえずフックて何だか説明してほしいお
    /(●)   (●)\ 
   /   (__人__)   \
   |     (  (      |
   \     `ー'     / 
   ノ           \








class YaruoTemplate{
    final void prepareJob(){
        openBrowser();
        checkInternet();
        if( isRest() ){
            restJob();
        }
        closeBrowser();
    }

    abstract void restJob();

    boolean isRest(){
        return false;
    }
}
簡単に説明すると、このisRest()メソッドをフックという。
こいつをサブクラスでオーバーライドして
仕事を休憩する(restJob())かどうか決めるんだ。
これでテンプレート化されているアルゴリズムをサブクラスが条件付で制御できるだろう。
restJob()の実装でvipを保守しようが、ニュー速+に張り付いてようが構わんが、
休憩なんてとってられる状態ではない場合に、
isRest()フックで、サブクラスがfalseを返す実装にすればいい。
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \ 
    |    |ヽ、二⌒)







class MyJob extends YaruoTemplate{
    void restJob(){
        System.out.println( "VIPを保守するお" );
        System.out.println( "ニュー速+にはりつくお" );
    }
    boolean isRest(){
        // 絶対trueを返す
        return true;
    }
}
           ____ 
        /⌒  ⌒\ 
.      /( ●)  (●)\   こうかお?
     / ::::::⌒(__人__)⌒::::: \ 
    |      |r┬-|     |  
     \       `ー'´     / 
    ノ            \ 
  /´               ヽ                 カ 
 |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ 
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ 
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) 
     ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐ 
  ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l 
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ 








   / ̄ ̄\     ・・・やると思ったが、
 /   _ノ  \  isRest()の実装がキモなんだが。
 |    ( ●)(●)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \ 
    |    |ヽ、二⌒)







    boolean isRest(){
        String ans = null;
        System.out.println( "休憩を取りますか?(y/n)")
        BufferedReader in = BufferedReader( new InputStreamReader( System.in ) );
        try{
            ans = in.readLine();
        }
        catch( IOException e ){}
        if( ans == null ){
            return false;
        }
        else if( ans.toLowerCase().startsWith("y")){
            return true;
        }
        return false;
    }

   / ̄ ̄\    これでフックが効果を発揮するだろう。
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \ 
    |    |ヽ、二⌒)










        ____ 
      /_ノ   ヽ_\      
    /(●)   (●)\     
   /   (__人__)   \  えー・・・そうかなぁ
   |     (  (      |  
   \     `ー'     /   
   ノ           \      












   / ̄ ̄\  (こいつだんだんタメ口になってきやがってるな)
 /   _ノ  \ まぁ、フックがわかればいい。
 |    ( ●)(●)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \ 
    |    |ヽ、二⌒)
フックは必ずしもテンプレートメソッドに適用されるものではありませんが、フックを使って抽象クラスのアルゴリズムのフローを条件付で制御できるので非常に便利です。
そしてフックはサブクラスで必ずしも実装しなくてもよいので、アルゴリズムの「オプション部分を実装する方法」を提供出来ます
≪第12回第14回≫

★このコンテンツに目的の情報はありませんでしたか?


[ 最近のエントリーとその関連エントリー ]


[ スポンサードリンク ]

トラックバック

このエントリーのトラックバックURL:
http://mojalog.com/cgi/mt/mt-tb.cgi/279

コメントを投稿

ツリータイプ・カテゴリー

open all | close all

リファラから検索


サイト内検索