国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php設計模式系列--觀察者模式

lykops / 3565人閱讀

摘要:模式定義觀察者模式定義對象間的一種一對多或一對一的依賴關系,當被觀察者狀態發生改變時,注冊的觀察者都會被通知。需要在系統中創建一個觸發鏈,對象的行為將影響對象,對象的行為將影響對象,可以使用觀察者模式創建一種鏈式觸發機制。

模式定義

觀察者模式(observer pattern): 定義對象間的一種一對多(或一對一)的依賴關系,當被觀察者狀態發生改變時,注冊的觀察者都會被通知。
觀察者模式又稱 發布-訂閱(publish/subscribe)模式、模型-視圖(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents)模式

模式動機

建立一種對象和對象之間的依賴關系,一個對象發生改變時將自動通知其他對象,其他對象收到通知各自處理自己的業務邏輯。這里發生改變的對象稱為被觀察者,被通知的對象稱為觀察者。這些觀察者之間沒有關系,可以根據業務需求添加或刪除觀察者,便于系統維護和擴展。

模式結構

Subject(目標)

ConcreteSubject(具體目標)

Observer: 觀察者

ConcreteObserver:具體觀察者

UML 圖

代碼示例

代碼實現的場景: 假設有個一個商人賣東西,他的用戶有窮人和富人兩類,商人的商品可能會漲價也可能會降價 價格波動對窮人和富人的購買行為有不同的影響。
分析: 這里的觀者目標是 商品價格 ,被觀察者是窮人和富人,商品價格變化將會通知窮人和富人,窮人富人對購買做出不同的反映。

// 目標
interface Observables
{
    public function attach(Observer $ob);
    public function detach(Observer $ob);
    public function notify();
}



// 具體目標

class Saler implements Observables
{
    protected  $obs = [];
    protected  $range = 0;

    public function attach(Observer $ob)
    {
        $this->obs[] = $ob;
    }

    public function detach(Observer $ob)
    {
        foreach ($this->obs as $k=>$v){
            if($v != $ob){
                $this->obs[] = $v;
            }
        }
    }

    public function notify()
    {
        // $this->range 為0表示價格不變 大于0漲價 小于0降價
        if($this->range != 0){
            foreach ($this->obs as $ob) {
                $ob->update($this);
            }
        }
    }

    public function increPrice($range)
    {
        $this->range = $range;
    }

    public function getRange()
    {
        return $this->range;
    }
}

  // 觀察者
  interface Observer
  {
    public function update(Observables $obv);
  }

 //具體觀察者(窮人)
class PoorBuyer implements Observer{
public function update(Observables $obv)
{
    if($obv->getRange()>0){
        echo "窮人:漲價不買了
"; }else{ echo "窮人:降價了趕緊買
"; } } } //具體觀察者(富人) class RichBuyer implements Observer{ public function update(Observables $obv) { echo "富人:價格波動沒關系,繼續購買
"; } }
模式應用場景

一個抽象模型有兩個方面,其中一個方面依賴于另一個方面。將這些方面封裝在獨立的對象中使它們可以各自獨立地改變和復用

一個對象的改變將導致其他一個或多個對象也發生改變,而不知道具體有多少對象將發生改變,可以降低對象之間的耦合度。

一個對象必須通知其他對象,而并不知道這些對象是誰。

需要在系統中創建一個觸發鏈,A對象的行為將影響B對象,B對象的行為將影響C對象……,可以使用觀察者模式創建一種鏈式觸發機制。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26309.html

相關文章

  • php設計模式

    摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...

    Dionysus_go 評論0 收藏0
  • php設計模式

    摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...

    vspiders 評論0 收藏0
  • 編程中的那些套路——關于察者模式

    摘要:我們應該寫一段拓展性強與維護性較強的代碼,由此衍生出觀察者模式。 該文章屬于《編程中的那些經典套路——設計模式匯總》系列,并且以下內容基于語言PHP 今天我們來談談觀察者模式,這是一個經常用到的設計模式。 讓我們想象一個場景:一個網站有不同等級區域的用戶,不同等級的的用戶登錄后可以獲得對應的服務(一級用戶登錄后獲得一級服務,二級用戶登錄后獲得二級服務,…以此類推)。那么我們如何寫這段業...

    Fourierr 評論0 收藏0
  • php設計模式(1) 前言

    摘要:就像一群人完成某一項工作,不能一窩蜂全上,需要有組織有紀律,這個組織和紀律就是設計模式的概念。行為型設計模式用于在不同的對象之間管理算法關系以及職責結構型設計模式用于在不同的對象之間構造大的對象結構。 前言:php設計模式這個系列是基于我2012年的學習筆記,共11篇,結合近幾年一些開發實踐,也參考網上的一些高手的文章和視頻,編輯整理而成,希望能給大家的幫助帶來一些幫助。php設計模式...

    twohappy 評論0 收藏0
  • PHP 設計模式概述

    摘要:創建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設計模式(Design pattern)是什么 設計模式是一套被反復使用、多數人知曉、經過分類編目的代碼設計的經驗總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設計模式 在軟件開發過...

    IntMain 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<