« やる夫がデザインパターンをやるようです 第15回 | メイン | やる夫がデザインパターンをやるようです 第17回 »



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

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


   / ̄ ̄\  オブザーバだってのっけから言ってんだから
 /   _ノ  \ 意識して実装してもらわなきゃ困るだろ
 |    ( ●)(●)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)






      ____   「オブザーバとは」でググっても
    /_ノ   ヽ_\ 日本語でおkなサイトしかなかったからだお
   /( ●) ( ●)\
 / ::::::⌒(__人__)⌒:::::\
 |        ̄      |
 \              /






       ____  この業界の8割は自分で言ってることが
     /⌒  ⌒\ なんだか分かってないやつばかりだお
   /( ―)  (―)\
  /::::::⌒(__人__)⌒::::: \
  |              |
  \               /






 コンポジットしているインスタンスにデリゲートして拡張し、
 具象実装に対する依存度をへらすのである。
          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー'´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))



     |  |   |   |
     _||_||__||  ||
    (__/   `ー――
   (___/  r
    (_レノ)\   ___
    (__/__/

       ____   VIPならポンコまで読んだ
     /⌒  ⌒\  って言われるお
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     |
  \      `ー'´     /
■コンポジットしているインスタンス
→あるクラスが保持しているメンバインスタンス
class Hoge {
	private Moge mogeInst; // <-コレ
}
■デリゲートして
→委譲する→(処理を)任して
class Hoge {
	private Moge mogeInst;
	public void method(){
		mogeInst.doit(); // <-コレ
	}
■拡張し、
→上記mogeInstは拡張したサブクラスでnewされることで処理を動的に入れ替えできる
class Hoge {
	private Moge mogeInst;
	public void setMoge( Moge param ){
		mogeInst = param; // <- コレ
	}
////////// 使うときは //////////////
hogeInst.setMoge( new SubMoge() ); // <- コレ
■具象実装に対する依存度をへらすのである。
→インターフェイスやスーパータイプへのプログラミングの
	Dog dog = new Dog(); 
	dog.bark(); // <- 犬が吠えるという具象実装がされている例
	Animal dog = getAnimal();
	// 動物インターフェイス・スーパータイプへの(吠える)実装がされている例
	dog.makeSound(); 
→前者でこれを実装したクラスは、Dogに依存し、後者は動物というインターフェイス・スーパータイプへ依存している。
               ごちゃごちゃいってねぇで
        / ̄ ̄\   コードなおせこのハゲ
      /       \ いつになったらカプセル化を覚えんだ
      |::::::        |
     . |:::::::::::     |
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~'´



    _/⌒  ⌒\_
  /:●))(__人__)((● \  はいお。。。
  |     |r┬-|     |  あんまりぶたないでほしいお。
  \      `ー'┃     /









     ____
   /      \ ( ;;;;( オブザーバ・・・?ってのは
  /  _ノ  ヽ__\) ;;;;) ヲチャ(watcher)のことらしいお
/    (─)  (─ /;;/  てことは
|       (__人__) l;;,´
/      ∩ ノ)━・'/
(  \ / _ノ´.|  |
.\  "  /__|  |
  \ /___







     ____
   /      \   NicoshDataクラスがステータスを受ける
  /  ─    ─\  ブリッジをしてくれるわけだから
/    (●)  (●) \ こいつをヲチすればいいお。。。
|       (__人__)    |
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /







     ____
   /      \  表示系のcharactericDspInstインスタンスとかが
  /  ─    ─\ NicoshDataクラスのヲチャってことかお。。
/    (○)  (○) \
|       (__人__)    |
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /








        ノ L____
       ⌒ \ / \   なぞは全てときtあろ!!!
      / (○) (○)\
     /    (__人__)   \
     |       |::::::|     |
     \       l;;;;;;l    /l!| !
     /     `ー'    \ |i
   /          ヽ !l ヽi
   (   丶- 、       しE |そ  ブヒッ!!
    `ー、_ノ       ∑ l、E ノ <
               レY^V^ヽl








   / ̄ ̄\     (こいつ今 噛んだのか?)
 /   _ノ  \   わかったようだな。
 |    ( ●)(●) オブザーバとして表示系の実装をすれば
. |     (__人__) NicoshDataクラスはそいつらの扱いが楽だろ
  |     ` ⌒´ノ NicoshDataクラスはjavaで言うObservableで
.  |         } 考えることが出来るだろう。
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)




       ____ (おならをかき消したのはばれてないみたいだお)
     /⌒三 ⌒\ じゃあ実装してみるお
   /( ―)三(―)\
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     |
  \      `ー'´     /






public interface Observer {
	// 通知を受ける
	public void update( int hp, int sp, string itemNm );
}

public interface Subject {
	// オブザーバを登録できる。
	public void registerObserver( Observer obsrvInst );
	// 登録したオブザーバを削除できる。
	public void removeObserver( Observer obsrvInst );
	// 登録したオブザーバに通知する。
	public void notifyObservers();
}




     ____
    / ⌒  ⌒  \
  ./( ―) ( ●)  \
  /::⌒(_人_)⌒:::::  | チラッ
  |    ー       .|
  \          /







   / ̄ ̄\
 /   _ノ  \   インターフェイスは悪くないな
 |    ( ●)(●) (なんか匂うんだが。。。)
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)





public class NicoshData implements Subject {
    // 通知するオブザーバ群を保持する
    private ArrayList observers;


     ____  あとはインターフェイスのインプリメントだお
    / ⌒  ⌒  \
  ./( ―) ( ●)  \
  /::⌒(_人_)⌒:::::  | チラッ
  |    ー       .|
  \          /




   / ̄ ̄\
 /   _ノ  \   (チラチラうぜぇな)
 |    ( ●)(●) そういうことだ。
. |     (__人__) じゃあ次回はオブザーバを
  |     ` ⌒´ノ やる夫がまとめてみろ。
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)









        ノ L____
       ⌒ \ / \  おいらにまかせてくださいお!
      / (○) (○)\
     /    (__人__)   \
     |       |::::::|     |
     \       l;;;;;;l    /l!| !
     /     `ー'    \ |i
   /          ヽ !l ヽi
   (   丶- 、       しE |そ  ブヒッ!!
    `ー、_ノ       ∑ l、E ノ <
               レY^V^ヽl








   / ̄ ̄\
 /   _ノ  \   (ブヒッ・・・だと・・・?)
 |    ( ○)(○)  ・・・お、おお。がんばれ。
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ
   /    く
   |     \
    |    |ヽ、二⌒)






     ____
    / ⌒  ⌒  \
  ./( ―) ( ○)U \
  /::⌒(_人_)⌒:::::  | チラッ
  |    ー    U  .|
  \          /






   / ̄ ̄\
 /   _ノ  \  (それでさっきからチラチラみてんのか)
 |    ( ○)(○)なにを俺に通知したいんだ・・・?
. | U   (__人__)
  |     ` ⌒´ノ
.  |U U      }
.  ヽ        }
実は、javaにはjava.util.Observerというインターフェイスがあります。このインターフェイスは、やる夫が書いたようにupdateというインターフェイスを持っていて、実際にはupdate(Observable o, Object arg) というメソッドをインプリメントする必要があります。
第2引数は通知内容ですが、第1引数は上記サンプルで言うSubjectインターフェイスです。なぜこのインターフェイスを渡すのかなどもあわせて次回解説したいと思います。

≪第15回第17回≫

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


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


[ スポンサードリンク ]

トラックバック

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

コメントを投稿

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

open all | close all

リファラから検索


サイト内検索