一看就懂系列之 php设计模式(二)

友情链接:一看就懂系列之 php设计模式(一)

前言

今天看到一句话说的非常好:“设计模式更多想表达的是一种想法,而并非具体的代码实现”。

设计模式

观察者模式

不得不承认网上很多写观察者模式的文章,但多数都是看过去觉得不是很好理解,确实观察者模式不是很好理解,我只是写写自己的理解。

我的理解

1.定义两个接口:观察者接口、被观察者接口(主题)
2.定义两部分类:
-被观察者(主题)的实现类,包括注册函数,取消注册函数,运行函数(也叫通知函数)
-观察者的类,每个类都继承被观察者接口,并且各自实现自己的复杂的逻辑过程。
3.使用前每个观察者的类需要先通过注册函数注册,最后统一由运行函数(也叫通知函数)统一执行

使用姿势

1.当系统中某段逻辑特别复杂特别长藕合度特别高的时候,可以尝试观察者模式,进行解耦,每个部分都拆开来定义类,最后再统一执行。可以减少到处实例化类的麻烦。
2.项目中使用场景多存在于复杂的业务模块,使用观察者模式防止日积月累后,文件冗长,导致后续维护困难。

伪代码实现

<?php
/**
 * 观察者模式
 */
interface PaperObserver //观察者接口
{
    function register($sub); //注册函数
    function trigger(); //执行函数(也叫通知函数)
} 
 
class Paper implements PaperObserver{ /* 主题 */
    private $_observers = array();
 
    public function register($sub){ /* 注册观察者 */
        $this->_observers[] = $sub;
    }
 
     
    public function trigger(){  /* 外部统一访问 */
        if(!empty($this->_observers)){
            foreach($this->_observers as $observer){
                $observer->update();
            }
        }
    }
}
 
/**
 * 观察者要实现的接口
 */
interface Observerable{
    public function update();
}
 
class Subscriber implements Observerable{
    public function update(){
        echo "Callback\n";
    }
}

/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();

如果你觉得有收获~可以关注我的公众号【咖啡色的羊驼】~第一时间收到我的分享和知识梳理~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值