成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php面向?qū)ο笤O(shè)計模式 之 觀察者模式

genedna / 384人閱讀

摘要:最近在學的設(shè)計模式,看到了觀察者模式,在此寫下一點理解問題假如一個小販,他把產(chǎn)品的價格提升了,不同的消費者會對此產(chǎn)生不同的反應。

最近在學php 的設(shè)計模式, 看到了觀察者模式,在此寫下一點理解:

問題:
假如一個小販, 他把產(chǎn)品的價格提升了, 不同的消費者會對此產(chǎn)生不同的反應。一般的編程模式無非是獲取提升的價格,然后獲取所有的消費者,再循環(huán)每個消費者, 不同的消費者根據(jù)價格漲幅做出決定,如果消費者的類型有限,因而進行的判斷也不多,這種無可厚非,但如果有更多的類型的消費者加入進來, 那這個代碼就變得臃腫且難以維護, 因為要不停的往里面加入判斷代碼,這個時候其實就適用觀察者模式了

思路:
  觀察者模式分為兩個角色, 觀察者(observer)和被觀察者(observables), 先在被觀察者注冊一系列的被觀察者, 在被觀察者發(fā)生變化的時候,通知觀察者,進而觀察者自動進行更新,這種一對多的關(guān)系就像你是一個小販(被觀察者),賣東西,有很多人(觀察者)在買你的東西,假如你要升價, 這個時候所有的消費者(觀察者)可以決定繼續(xù)買,還是不買,還是其他動作,作為小販(被觀察者)的你只需要把價格增加,繼而通知一下,而不用去管其他人(觀察者)的動作。

實現(xiàn):

 //先定義一個被觀察者的接口,這個接口要實現(xiàn)注冊觀察者,刪除觀察者和通知的功能。
 interface Observables
 {
    public function attach(observer $ob);
    public function detach(observer $ob);
    public function notify();
 }

 class Saler implements Observables
 {
    protected $obs = array();       //把觀察者保存在這里
    protected $range = 0;

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

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

    public function notify()
    {
        foreach($this->obs as $o)
        {
            $o->doActor($this);
        }
    }

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

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


 //定義一個觀察者的接口,這個接口要有一個在被通知的時候都要實現(xiàn)的方法
 interface Observer
 {
    public function doActor(Observables $obv);
 }

//為了容易閱讀,我在這里增加了一層,定義了一個買家, 之后會有Poor和Rich兩種不同的類型繼承這個類,用以表示不同類型的買家 
 abstract class Buyer implements Observer
 {
 }

 class PoorBuyer extends Buyer
 {
     //PoorBurer的做法
    public function doActor(observables $obv)
    {
        if($obv->getAddRange() > 10)
            echo  "不買了.
"; else echo "還行,買一點吧.
"; } } class RichBuyer extends Buyer { //RichBuyer的做法 public function doActor(observables $obv) { echo "你再漲我也不怕,咱不差錢.
"; } } $saler = new Saler(); //小販(被觀察者) $saler->attach(new PoorBuyer()); //注冊一個低收入的消費者(觀察者) $saler->attach(new RichBuyer()); //注冊一個高收入的消費者(觀察者) $saler->notify(); //通知 $saler->increPrice(2); //漲價 $saler->notify(); //通知

如果再有新的類型買家,只要再添加一個買家類型,繼承buyer,讓買家(被觀察者)注冊即可,而不用再去修改任何原來買家和賣家的任何內(nèi)容

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/20860.html

相關(guān)文章

  • php設(shè)計模式

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

    Dionysus_go 評論0 收藏0
  • php設(shè)計模式

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

    vspiders 評論0 收藏0
  • Laravel 深入核心系列教程

    摘要:前言年底了不太忙,最近一段時間也一直在研究,就想寫篇關(guān)于比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。優(yōu)點的就是為藝術(shù)家創(chuàng)造的框架,它也是工程化的趨勢。項目維護方便也是事實。如果有遇到問題可以直接在教程下面留言。 前言 年底了不太忙,最近一段時間也一直在研究laravel,就想寫篇關(guān)于laravel比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。由于第一次寫,...

    wemall 評論0 收藏0
  • 面向對象PHP模式:組合

    摘要:我們可以做一些小改進將的拋出異常代碼挪入父類屬于最小單位。完整代碼當我們需要在某個子類,實現(xiàn)個性化的業(yè)務邏輯時,組合模式的缺陷之一正在顯現(xiàn)出來簡化的前提是所有的類都繼承同一個基類,簡化優(yōu)點有時是以降低對象安全為代價。 開篇 如果你注意了目錄,會知道:組合是一個新的開始。在系統(tǒng)代碼設(shè)計的過程中,我們通過繼承來組織代碼,父類與子類,實質(zhì)上對應了業(yè)務的整體規(guī)范與具體需求。所以,我們需要將類按...

    546669204 評論0 收藏0
  • 優(yōu)才公開課筆記:php設(shè)計模式(一) 單例模式

    摘要:最近開展了三次設(shè)計模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計模式在中的應用,這是第一篇創(chuàng)建型模式之單例模式。不過因為不支持多線程所以不需要考慮這個問題了。 最近開展了三次設(shè)計模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計模式在PHP中的應用,這是第一篇創(chuàng)建型模式之單例模式。 一、設(shè)計模式簡介 首先我們來認識一下什么是設(shè)計模式: 設(shè)計模式是一套被反復使用、容易被他人理解的、可靠的代碼設(shè)計經(jīng)驗的總結(jié)。 設(shè)計模式不...

    guyan0319 評論0 收藏0

發(fā)表評論

0條評論

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