免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
常用設計模式之觀察者模式
觀察者模式(Observer Pattern):
 
        觀察者模式必須包含兩個角色:觀察者(Observer)和被觀察對象(Observable)。觀察者和被觀察者之間存在“觀察”的邏輯關系。當被觀察著發(fā)生改變時,觀察者就會觀察到這樣的變化,并作出相應的相應。觀察者模式完美地將觀察者和被觀察者的對象分離開。
        觀察者模式的實現(xiàn)通常是一個對象通過添加一個方法使本身變得可觀察(Observable)。當可觀察的對象更改時,它會將消息發(fā)送到已注冊的觀察者。這些觀察者(Observer)使用該信息執(zhí)行的操作與可觀察的對象(Observable)無關。
        下面以系統(tǒng)中的用戶列表為例,當新添加用戶時,用戶列表記錄器(觀察者)可以觀察此列表(被觀察者),代碼如下:
 
<?php
interface IObserver {
    function onChanged($sender, $args);
}
 
interface IObservable {
    function addObserver($observer);
}
 
class UserList implements IObservable {
    private $_observers = array();
   
    function addObserver($observer) {
        $this->_observers[] = $observer;
    }
   
    function addUser($name) {
        foreach($this->_observers as $obj) {
            $obj->onChanged($this, $name);
        }
    }
   
    function __toString() {
        return "UserList";
    }
}
 
// 只使用一個UserListLogger實例進行觀察
class UserListLogger implements IObserver {
    private static $instance = null;
   
    private function __construct() {}
   
    public static function getInstance() {
        if(self::$instance == null) {
            self::$instance = new UserListLogger();
        }
        return self::$instance;
    }
   
    function onChanged($sender, $args) {
        echo $args . "被添加到用戶列表" . $sender . "中<br>";
    }
}
 
$ul = new UserList();
$ul->addObserver(UserListLogger::getInstance());
$ul->addUser("趙二");
$ul->addUser("張三");
 
$ul2 = new UserList();
$ul2->addObserver(UserListLogger::getInstance());
$ul2->addUser("李四");
 
$ul->addUser("王五");
?>
 
        觀察者模式的類關系圖:
        觀察者模式的運行結果:
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
設計模式-觀察者設計模式
.NET設計模式(19):觀察者模式(Observer Pattern)
什么時候使用觀察者模式
Java:應用Observer接口實踐Observer模式
面向接口編程詳解(三)——模式研究
【C#設計模式-觀察者模式】
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服