Observer
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[デザインパターン]]
オブザーバパターン。變更通知。登録と監視の二つが必要にな...
<?php
class Object{ # ルートクラス
function observeValueForKey($key,$object,$change){} # ...
function addObserver($key,$observer){
# オブザーバ登録。key はセッタで變更する際に使ふ物を指...
# ここではハッシュ的に管理することにする。
$this->obsever[$key] = $observer;
}
function removeObserver($key,$observer){
# オブザーバ解除。$observerを渡して居るのは同じオブジ...
# 生成時に通し番號を附けてやるとかすれば、同一性の確認...
# ここでは簡單に除去するだけの實裝
unset($this->obsever[$key]);
}
function setValueForKey($value,$key){
# ここらへんにセッターを實裝する。
# 單純には次のやうにセッタを呼ぶけれど、確りとエラー處...
# また必要なら <key> を set<Key> にするなどの工夫が必要。
# かういつた規約は自分で決めること。他の API やライブラ...
$key = "set".$key;
$this->$key($value);
# セットした前後でオブザーバに通知する。
# 三番目の引數は元のインスタンス變數の値を格納したりし...
# 取得方法は自分で考へて欲しい。
# オブザーバがあるか無いかなど調べる實裝も必要。
$this->obsever[$key]->observeValueForKey(key,$this,arra...
}
function valueForKey($key){
# セッタに同じ。これはゲッタ。
$key = "get".$key;
return $this->$key
}
}
# このクラスを繼承すれば、オブザーバとセッタの恩惠をうけ...
class Observer extends Object{
function observeValueForKey($key,$object,$change){
# このメソッドは上書きする。もし、通知された内容に問題...
echo $key . "の變更を受信";
}
}
class Subject extends Subject{
function setABC($value){
#適當にインスタンス變數にぶちこめ。
}
}
?>
これを次のやうに遣へばよい。
$sub = new Subject;
$obs = new Observer;
$sub->addObserver("ABC",$obs);
$sub->setValueForKey("test1","ABC");
$sub->removeObserver("ABC",$obs);
$sub->setValueForKey("test1","ABC");
何らかの監視對稱が「$sub」である。監視するのはこの實裝自...
何らかの通知對稱は「$obs」である。通知された内容の適性を...
この實裝は Cocoa NSObect の KVO と KVC のものから一例とし...
終了行:
[[デザインパターン]]
オブザーバパターン。變更通知。登録と監視の二つが必要にな...
<?php
class Object{ # ルートクラス
function observeValueForKey($key,$object,$change){} # ...
function addObserver($key,$observer){
# オブザーバ登録。key はセッタで變更する際に使ふ物を指...
# ここではハッシュ的に管理することにする。
$this->obsever[$key] = $observer;
}
function removeObserver($key,$observer){
# オブザーバ解除。$observerを渡して居るのは同じオブジ...
# 生成時に通し番號を附けてやるとかすれば、同一性の確認...
# ここでは簡單に除去するだけの實裝
unset($this->obsever[$key]);
}
function setValueForKey($value,$key){
# ここらへんにセッターを實裝する。
# 單純には次のやうにセッタを呼ぶけれど、確りとエラー處...
# また必要なら <key> を set<Key> にするなどの工夫が必要。
# かういつた規約は自分で決めること。他の API やライブラ...
$key = "set".$key;
$this->$key($value);
# セットした前後でオブザーバに通知する。
# 三番目の引數は元のインスタンス變數の値を格納したりし...
# 取得方法は自分で考へて欲しい。
# オブザーバがあるか無いかなど調べる實裝も必要。
$this->obsever[$key]->observeValueForKey(key,$this,arra...
}
function valueForKey($key){
# セッタに同じ。これはゲッタ。
$key = "get".$key;
return $this->$key
}
}
# このクラスを繼承すれば、オブザーバとセッタの恩惠をうけ...
class Observer extends Object{
function observeValueForKey($key,$object,$change){
# このメソッドは上書きする。もし、通知された内容に問題...
echo $key . "の變更を受信";
}
}
class Subject extends Subject{
function setABC($value){
#適當にインスタンス變數にぶちこめ。
}
}
?>
これを次のやうに遣へばよい。
$sub = new Subject;
$obs = new Observer;
$sub->addObserver("ABC",$obs);
$sub->setValueForKey("test1","ABC");
$sub->removeObserver("ABC",$obs);
$sub->setValueForKey("test1","ABC");
何らかの監視對稱が「$sub」である。監視するのはこの實裝自...
何らかの通知對稱は「$obs」である。通知された内容の適性を...
この實裝は Cocoa NSObect の KVO と KVC のものから一例とし...
ページ名: