设计模式之我见二观察者模式

定义

程序设计过程中出现一种一对多的依赖,当一个对象的状态发生改变,所有依赖它的对象都得到通知并被自动更新,观察者模式就派上用场了。

禅里引用了一个战国时期秦国李斯监视韩国韩非子的例子来形象的解释观察者模式

场景

李斯成为最强诸侯国秦国的上尉后致力统一全国于是安插了间谍到各个国家的重要人物身边,以获取重要的信息,韩非子作为韩国重臣,身边自然少不了间谍,韩非子的任何举动李斯都要了如指掌。

业务我们知道了,被观察者韩非子吃饭、玩游戏等等一系列活动,都要被告知李斯大人。禅里用java实现的 我用php来改造下

在未引入观察者的情况下李斯大人是如何获取信息呢?

很简单

1.首先我们定义两个接口

//被观察者韩非子
interface IHanfeizi
{
    /**
     * 该吃饭了
     */
    public function haveRice();

    /**
     * 玩会游戏
     */
    public function haveFun();
}
//抽象观察者李斯
interface Ilisi
{
    /**
     * 发现状况,搞起来
     */
    public function update();
}

2.实现他们让他们活起来

class Hanfei implements IHanfeizi
{
    public function haveFun()
    {
        // TODO: Implement haveFun() method.
        echo "韩非子:玩会游戏<br/>";
        //通知李斯大人
        $lisi = new Lisi();
        $lisi->update('韩非子在吃饭');
    }

    public function haveRice()
    {
        // TODO: Implement haveRice() method.
        echo "韩非子:开始吃饭咯<br/>";
        //通知李斯大人
        $lisi = new Lisi();
        $lisi->update('韩非子在玩游戏');
    }
}
class Lisi implements Ilisi
{
    public function update($args)
    {
        // TODO: Implement update() method.
        //发现韩非子的活动了,立马向秦王老板汇报
        echo "报告老板,韩非子在搞事情----".$args.'</br>';
        echo "汇报完毕。</br>";
    }
}
$hanfei = new \Common\Example\Hanfei();
//韩非子开始吃饭了
$hanfei->haveRice();
//韩非子开始玩游戏
$hanfei->haveFun();

3.运行结果如下

韩非子:玩会游戏
报告老板,韩非子在搞事情----韩非子在玩游戏
汇报完毕。
韩非子:开始吃饭咯
报告老板,韩非子在搞事情----韩非子在吃饭
汇报完毕。

这时候韩非子的一切行为都在李斯大人的监控之下了,大功告成?再思考一下,总感觉怪怪的,对于韩非子这样的大人物,不单单只有秦国一家对其关怀备至,要是其它国家也想得知韩非子的一举一动该如何解决?显然上述例子无法做到,那么我们加入观察者试试吧


图片.png

改变一下引入观察者

interface IObserver
{
    /**
     * 发现状况,搞起来
     */
    public function update($args=null);
}
abstract class AObservable
{
    private $_observers=[];

    /**
     * 添加观察者
     * @param IObserver $observer
     */
    public function addObserver(IObserver $observer)
    {
        $this->_observers[] = $observer;
    }

    /**
     * 依次通知观察者
     */
    public function notifyObserver()
    {
        foreach ($this->_observers as $observer)
        {
            $observer->update();
        }
    }
}

这时候不管李斯马斯还是其他什么人我们再去通知不同的观察者直接创建新的观察者去实现观察者接口,接着如何操作就很随意咯

class ObserverLisi implements IObserver
{
    public function update($args = null)
    {
        // TODO: Implement update() method.
    }
}
class ObserverMasi implements IObserver
{
    public function update($args = null)
    {
        // TODO: Implement update() method.
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • 法之魂 韩非未死,那杯酒里,没有毒。 可是,醒来的韩非,仿佛看透了生死,他只说了一句话:“笔,纸。”既然死不了,或...
    风致自己阅读 1,088评论 0 3
  • 一不留神地,初中毕业都10年了,真快呀……若不是罗婷一大早的信息截图,是否我将淡忘师恩? 那是在初一吧,班上教了一...
    花的骄傲阅读 306评论 0 0
  • 看完大叔的那篇文章,内心还是有很多共鸣的,尤其是评论里的一句话更加加深了认同感. 【其实不纠结加班不加班这一点,看...
    蕾o_O阅读 190评论 0 0
  • d> 我正式进入 习惯养成的疲惫区,我鼓励自己坚持一下,坚持写日新点滴,很快就会有迎来收获期。每天五点起床的习惯也...
    复苏森林阅读 48评论 0 1