观察者模式

观察者模式,包含观察者和被观察者,或者理解为订阅者和被发布者,所有观察者模式有时也被称为发布/订阅模式,该模式用于为对象实现发布/订阅功能:一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作

代码示例:

/**
 * 观察者,订阅者
 * Class A
 */
class A {

    public function action()
    {
        (new B())->work(new self(), 'handle');
    }

    public function handle($data)
    {
        echo $data;
        return;
    }

}

/**
 * 被观察者,发布者
 * Class B
 */
class B {

    public function work(A $obkect, $call_back)
    {
        $data = $this->getData();
        if ($data) {
            $obkect->$call_back($data);
        }
        return;
    }

    public function getData()
    {
        $data = 'hllo word!';
        return $data;
    }

}

/**
 * demo
 */
(new A())->action();
//输出 hello word!

观察者模式优点是降低代码的耦合度,不然所有业务逻辑都要在在一个函数体处理,如果有更多的类型业务代码加入进来, 那这个代码就变得臃肿且难以维护, 因为要不停的往里面加入判断代码,这个时候其实就适用观察者模式了,使用了观察者模式如果有新的业务就相当于新增一个观察者来处理业务逻辑

观察者模式的局限性,即观察者只能处理与被观察者约定好的规范格式数据,也可以理解观察者是每个独立处理被观察者数据的函数之间调用关系结构集合

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值