1. 程式人生 > >設計模式php例項:觀察者模式

設計模式php例項:觀察者模式

當一個物件狀態發生改變後,會影響到其他幾個物件的改變,這時候可以用觀察者模式。像wordpress這樣的應用程式中,它容外部開發組開發外掛,比如使用者授權的部落格統計外掛、積分外掛,這時候可以應用觀察者模式,先註冊這些外掛,當用戶釋出一篇博文後,就回自動通知相應的外掛更新。

觀察者模式符合介面隔離原則,實現了物件之間的鬆散耦合。

觀察者模式UML圖:


在php SPL中已經提供SplSubject和SqlOberver介面

interface SplSubject
{
    function attach(SplObserver $observer);
    function detach(SplObserver $observer);
    function notify();
}
interface SqlObserver
{
    function update(SplSubject $subject);
}
下面具體實現上面例子
class Subject implements SplSubject
{
    private $observers;

    public function attach(SplObserver $observer)
    {
        if (!in_array($observer, $this->observers)) {
            $this->observers[] = $observer;
        }
    }


    public function detach(SplObserver $observer)
    {
        if (false != ($index = array_search($observer, $this->observers))) {
            unset($this->observers[$index]);
        }
    }

    public function post()
    {
        //post相關code
        $this->notify();
    }

    private function notify()
    {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }

    public function setCount($count)
    {
        echo "資料量加" . $count;
    }
    public function setIntegral($integral)
    {
         echo "積分量加" . $integral;
    }

}


class Observer1 implements SplObserver
{
    public function update($subject)
    {
        $subject-> setCount(1);
    }
}
class Observer2 implements SplObserver
{
    public function update($subject)
    {
        $subject-> setIntegral(10);
    }
}


class Client
{
    public  function test()
    {
        $subject = new Subject();
        $subject->attach(new Observer1());
        $subject->attach(new Observer2());
        $subject->post();//輸出:資料量加1 積分量加10
    }
}



相關推薦

設計模式php例項觀察模式

當一個物件狀態發生改變後,會影響到其他幾個物件的改變,這時候可以用觀察者模式。像wordpress這樣的應用程式中,它容外部開發組開發外掛,比如使用者授權的部落格統計外掛、積分外掛,這時候可以應用觀察者模式,先註冊這些外掛,當用戶釋出一篇博文後,就回自動通知相應的外掛更新。

Head First設計模式 第二章觀察模式

觀察者模式是JDK中使用最多的模式之一。 氣象監測應用: 任務: WeatherData物件負責追蹤目前的天氣狀況(溫度、溼度、氣壓)。建立一個應用,有三種佈告板,分別顯示目前的狀況、氣象統計及簡單的預報。當WeatherObject 物件獲得最新的測量資料時, 三種佈

Cocos2d-x設計模式之六 觀察模式

1、應用場景 前面在介紹單例模式的時候,提到了一個類CCNotificationCenter,它除了應用單例模式以外,還應用了觀察者模式。CCNotificationCenter類是觀察者模式中的目標物件,而CCNotificationObserver則是觀察者。 一個目標物件可以註冊多個觀察者,當目標物件

設計模式學習總結觀察模式(Observer Pattern)

意圖 定義物件間的一種一對多的依賴關係,當一個物件的狀態發生變化時,所以依賴於它的物件都得到通知並被自動更新。 適用性 當一個抽象物件有兩個方面,其中一個方面依賴於另一個方面。將這兩者封裝在兩個獨立的物件中使它們可以被獨立地改變與複用。 當對一個物件

PHP設計模式觀察模式

php 設計模式 觀察者模式 發布 訂閱 首先來看個栗子://事件 class EventDemo { //觸發了新事件 public function trigger() { echo "Event happening\r";

php 運用設計模式觀察模式設計電商平臺支付成功程式|Github倉庫

前(fei)言(hua) 在支付程式中,大型專案的維護,如果沒有運用到設計模式,面向過程的程式設計,order程式會日益增加,程式看上去雜亂無章,今天寫了一個小demo ,之前沒有運用過觀察者模式的小夥伴們,可以瞭解一下。 學到什麼 學會了這種設計模式,會讓你的程式碼清晰明瞭

設計模式模式PK觀察模式VS責任鏈模式

ipa 隨機 保留 聲明 pri 測試 void c_str window 1、概述 為什麽要把觀察者模式和責任鏈模式放在一起對比呢?看起來這兩個模式沒有太多的相似性,真沒有嗎?回答是有。我們在觀察者模式中也提到了觸發鏈(也叫做觀察者鏈)的問題,一個具體的角色既可以是觀察者

設計模式觀察模式--Observer

sub 系統調用 特點 xiaomi ttr root comm wrap 切換 一、什麽是觀察者模式 1、生活中的觀察者模式 1、警察抓小偷 在現實生活中,警察抓小偷是一個典型的觀察者模式「這以一個慣犯在街道逛街然後被抓為例子」,這裏小偷就是被觀察者,各個幹

設計模式觀察模式(有利於代碼解耦)

attribute 處理 script refresh 含義 復制 重新 ecif nec 什麽是ApplicationContext? 它是Spring的核心,Context我們通常解釋為上下文環境,但是理解成容器會更好些。 ApplicationContext則是應用的

23種設計模式(8)觀察模式

println api pri 依次 move 類圖 bject 代碼實現 implement 定義:定義對象間一種一對多的依賴關系,使得當每一個對象改變狀態,則所有依賴於它的對象都會得到通知並自動更新。 類型:行為類模式。 類圖: 在軟件系統中經常會有這樣的需求:如

Java中的設計模式(七)觀察模式

name int 還要 The else 意圖 http exceptio 所有 介紹 觀察者模式是行為設計模式之一。當您對對象的狀態感興趣並希望在有任何更改時收到通知時,觀察者設計模式非常有用。在觀察者模式中,監視另一個對象狀態的對象稱為Observer,正在被監視的對象

Java設計模式11觀察模式

一、什麼是觀察者模式 在閻巨集博士的《JAVA與模式》一書中開頭是這樣描述觀察者(Observer)模式的:   觀察者模式是物件的行為模式,又叫釋出-訂閱(Publish/Subscribe)模式、模型-檢視(Model/View)模式、源-監聽器(Source/Listener)模式

PHP設計模式(5)—— 觀察模式

基本概念 整個觀察者模式,其實做的就是監聽事件、處理事件。 由此引出兩個角色,一個是觀察者Listener,另一個是事件處理者Handler。 例子 第一步,建立抽象事件類。 它的主要作用是提供兩個方法給具體事件類呼叫。 abstract clas

設計模式觀察模式(Observer Pattern)

目錄 一、模式含義 觀察者模式(Observer Pattern):定義物件之間的一種一對多依賴關係,使得每當一個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。 觀察者模式的別名:包括釋出-訂閱(Publi

Java程式效能優化 讀書筆記(六)設計模式觀察模式

一、觀察者模式 觀察者模式定義了物件間的一種一對多依賴關係,使得每當一個物件改變狀態,則所有依賴於它的物件都會得到通知並被自動更新。它將觀察者和被觀察者的物件分離開。提高了應用程式的可維護性和重用性。觀察者模式又稱為釋出/訂閱(Publish/Subscribe)模式。 觀

面試被問設計模式?不要怕看這裡觀察模式

本系列: 上一篇中,我給大家詳細講解了一下工廠模式以及面試中可能會被問到的關鍵點,我們先來溫習溫習。 工廠模式的關鍵點: 一、工廠模式分為簡單工廠,工廠和抽象工廠 二、三種工廠的實現是越來越複雜的 三、簡單工廠通過構造時傳入的標識來生產產品,不同產品都在同一個工廠

Java設計模式觀察模式(Observer Pattern)

觀察者模式:類似於報紙和雜誌的訂閱 出版者+訂閱者=觀察者模式 1.報紙的業務就是出版報紙。 2.向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的訂閱使用者,你就會一直收到新報紙。 3.當你不想再看報紙時,取消訂閱,他們就不會再

Head First設計模式觀察模式

觀察者模式:定義了物件之間的一對多依賴,這樣依賴,當一個物件改變狀態時,它的所有依賴者都會受到通知並自動更新 例子: package com.zoey.allTest.pattern.headFir

Java設計模式觀察模式以及Servlet中的Listener

觀察者模式(Observer Pattern)也稱釋出訂閱模式,它是一種在實際開發中經常用到的一種模式。 觀察者模式定義:定義物件一種一對多的依賴關係,使得每當一個物件改變狀態時,則所依賴它的物件會得到通知並被自動更新。 觀察者類圖如下: 圖1 觀察者模式的類圖  觀

設計模式(十二)觀察模式

優點:   觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合。被觀察者角色所知道的只是一個具體觀察者列表,每一個具體觀察者都符合一個抽象觀察者的介面。被觀察者並不認識任何一個具體觀察者,它只知道它們都有一個共同的介面。 缺點:   ① 如果在被觀察者之間有迴圈依賴的話,被觀察者會觸發它們