设计模式(三)--观察者模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式(三)--观察者模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
觀察者模式:定義了對象間的一種一對多的依賴關系,當被觀察的對象發(fā)生改變時,所有依賴于它的對象都會得到通知并被自動更新,而且被觀察的對象和觀察者之間是松耦合的。在該模式中,有目標(Subject)和觀察者(Observer)兩種角色。目標角色是被觀察的對象,持有并控制著某種狀態(tài),可以被任意多個觀察者作為觀察的目標。也叫發(fā)布--訂閱模式
簡單實例:再PC端登錄帳號時,其他客戶端帳號被踢下線,實現(xiàn)同一時間只能在一處登錄帳號。
//目標,被觀察 class user implements SplSubject {public $username='';public $password='';public $observers=null;public function __construct($username,$password){$this->username=$username;$this->password=$password;$this->observers=new SplObjectStorage();}public function attach(SplObserver $observer) {// TODO: Implement attach() method.$this->observers->attach($observer);}public function detach(SplObserver $observer) {// TODO: Implement attach() method.$this->observers->detach($observer);}public function notify() {// TODO: Implement notify() method.$userinfo['username']=$this->username;foreach ($this->observers as $observer) {$observer->update($this, $userinfo);}}public function login(){echo 'PC: '.$this->username.' login in';//通知$this->notify();}}class ios implements SplObserver{public function update(SplSubject $subject) {// TODO: Implement update() method.if (func_num_args() === 2) {$userinfo = func_get_arg(1);echo "<br>";echo 'IOS: ' . $userinfo['username'] . ' login out ';}} } class android implements SplObserver{public function update(SplSubject $subject) {// TODO: Implement update() method.if (func_num_args() === 2) {$userinfo = func_get_arg(1);echo "<br>";echo 'android: ' . $userinfo['username'] . ' login out ';}} }$user=new user('tom','123456'); //添加觀察者 $user->attach(new ios()); $user->attach(new android()); //通知 $user->login();詳細請參考:
https://www.ibm.com/developerworks/cn/opensource/os-cn-observerspl/
?
轉載于:https://www.cnblogs.com/Caoxt/p/10107503.html
總結
以上是生活随笔為你收集整理的设计模式(三)--观察者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle触发器简单使用记录
- 下一篇: 解决vscode安装后无法启动的问题