≪第15回・第17回≫
/ ̄ ̄\ オブザーバだってのっけから言ってんだから / _ノ \ 意識して実装してもらわなきゃ困るだろ | ( ●)(●) . | (__人__) | ` ⌒´ノ . | } . ヽ } ヽ ノ / く | \ | |ヽ、二⌒) ____ 「オブザーバとは」でググっても /_ノ ヽ_\ 日本語でおkなサイトしかなかったからだお /( ●) ( ●)\ / ::::::⌒(__人__)⌒:::::\ |  ̄ | \ / ____ この業界の8割は自分で言ってることが /⌒ ⌒\ なんだか分かってないやつばかりだお /( ―) (―)\ /::::::⌒(__人__)⌒::::: \ | | \ / コンポジットしているインスタンスにデリゲートして拡張し、 具象実装に対する依存度をへらすのである。 ____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ | |r┬-| | \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) | | | | _||_||__|| || (__/ `ー―― (___/ r (_レノ)\ ___ (__/__/ ____ VIPならポンコまで読んだ /⌒ ⌒\ って言われるお /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ | |r┬-| | \ `ー'´ /
■コンポジットしているインスタンス
→あるクラスが保持しているメンバインスタンス
→委譲する→(処理を)任して
→上記mogeInstは拡張したサブクラスでnewされることで処理を動的に入れ替えできる
→インターフェイスやスーパータイプへのプログラミングの逆
→あるクラスが保持しているメンバインスタンス
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 }
. ヽ }



